2015-01-08 39 views
1

我想计算所有的“A”在一个paritcular字符串中。列出字符串中的所有“A”

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 

namespace TESTING 
{ 
    class Testing 
    { 
     static void Main(string[] args) 
     { 
      //ask user for the filename 
      string userInput = fetchFileName("Enter the textfile you want to view: "); 

      //test if the filename writes anything to console 
      string fileContents = File.ReadAllText(userInput); 

      string theFileContents = analyseFile(fileContents); 
     // Console.WriteLine(theFileContents); 
      Console.ReadLine(); 

     } 

     private static string analyseFile(string fileContents) 
     { 
      string str = fileContents; 
      if (str.Contains("A"))     
      { 
       Console.WriteLine("YES"); 

      } 
      else 
      { 
       Console.WriteLine("NO"); 
      } 
      return str; 
     } 

     private static string fetchFileName(string askFileName) 
     { 
      Console.WriteLine(askFileName); 
      string userAnswer = Console.ReadLine(); 
      return userAnswer; 
     } 
    } 
} 
+1

你将需要以某种方式遍历文件的内容。你有没有覆盖'for'循环呢? Serv的答案很容易适应'for'循环,因为你的印象是你不应该使用'foreach'。但是,后者绝对是首选的做法。 – krillgar

回答

2

看看LINQ。它允许在任何类型的集合上执行整个范围的操作。而一个字符串是一个字符集合。下面的例子LINQ如何使您的生活更轻松:

string text = "A sdfsf a A sdfsf AAS sdfA"; 
int res = text.Count(letter => letter == 'A'); 

这里发生的是,你把text,并提供一个predicat说,你要采取的任何变量letter从字符串使得letter等于为char A。然后你想要数它们。

+0

你为什么提供烤箱准备好的代码?提问者显然希望学习不是一个完整的解决方案。 – mg30rg

+1

公平点。修正了。 – PiotrWolkowski

1

最简单的方法之一是遍历文件中的所有字符,并检查该字母是否等于您想要的字母。

当你意识到一个字符串,无非是那么一个字符数组,你可以这样做:

public int LetterCount(string filename, char letter) 
{ 
    int cnt = 0; 
    string source = File.ReadAllText(filename); 
    //Check every character in your string; if it matches increase the counter by 1 
    foreach (char c in source) 
    { 
     if(c == letter) 
     { 
      cnt++; 
     } 
    } 
    return cnt; 
} 

而且使用这样的:

int A_count = LetterCount(@"C:\test.txt", 'A'); 

请注意,如果文件实际存在,此代码不检查。如果您输入了错误的路径,则最终输入FileNotFoundException

+1

或更短:'File.ReadAllText(“Path”)。Count(c => c =='A')' – Ric

+0

我实际上不得不傻笑,而用Count @Ric读取解决方案。 – Marco

+1

@Ric如果他担心'foreach'对于他在班上的地方来说太高级了,'Count'更糟糕。 – Rawling

-1

如果你不想使用foreach,你可以擦除所有的字母A,并比较长度差异。
有点像这样:

private static string analyseFile(string fileContents) 
    { 
     var strippedString = fileContents.Replace("A",""); 
     var count = fileContents.Length - strippedString.Length; 

     return count.ToString(); 
    } 
+0

邪恶的想法。它使意图不明显(类似于执行'i.ToString()。Length == 1'检查,而不是'i> 0 && i <10' :) :),而它的代码少了*它不必要的慢。 – Sinatr

+0

他原来的问题说foreach太复杂了,所以我认为linq也会太多。性能明智,我怀疑会有很大的差异。我甚至发现一个消息来源声称替换方法击败了foreach&linq(虽然只有一点点)。 – Kristof

0

你可以使用LINQ

string text = "The quick brown fox jumps over the lazy dog"; 
var count = text.ToLower().Where(x => x == 'a').Count(); 
Console.WriteLine(count); 

但是,如果你不能使用任何先进的技术,你可以做这样的:

string text = "The quick brown fox jumps over the lazy dog"; 
int counter = 0; 
for (int i = 0; i < text.Count(); i++) 
{ 
    if (text[i] == 'a' || text[i] == 'A') 
    { 
     counter++; 
    } 
} 
Console.WriteLine(counter); 
0

尽量简单

string test = "ABBCDABNDEAA"; 

    int Count = test.Count(x => x == 'A'); 
0

使用LINQ,这可以通过很简单:

string myString = "ababsgsdfsaaaAA22bbaa"; 

var count = myString.ToLower().Count(c => c == 'a'); 

Console.Write(count); 

在这里,我们采取的字符串,并将其转换为小写,这样Aa会算在一起。然后我们使用简单的LINQ方法Count()来计算有a个字符的数量。

0

你可以这样做:

 string stringValue = "Addsadsd AAf,,werAA"; 

     int qtdChar = stringValue.Count(x => x == 'A'); 
     int qtdCharInsensitive = stringValue.Count(x => x == 'A' || x=='a'); 
1

的foreach只不过是另一种类型的循环。这可以通过for循环轻松完成。诀窍是将字符串分成单独的字符,以后可以进行比较。

我敢肯定,你会找出如何,如果我只是设置你在正确的道路上实现这一点:

string test = "My name is Isak"; 
char[] arrayOfChars = test.ToCharArray(); 
int count = 0; 

for (int i = 0; i < arrayOfChars.Length; i++) 
{ 
    if (arrayOfChars[i] == 'a' || arrayOfChars[i] == 'A') 
    { 
      count++; 
    } 
} 
相关问题