我想在每次运行循环时创建一个新变量,例如:
for (char c = 'a'; c <= 'z'; c++;)
{
countA++;
// I want to create a new variable(countB, countC, etc.) every time
// the loop is run
//if you couldn't tell already, this loop counts letters in a string
}
答案 0 :(得分:2)
根据Paolo Costa的建议,您可以使用数组:
string str = "lowercase string";
int[] counts = new int['z' - 'a' + 1];
for (int i = 0; i < str.Length; i++)
{
char ch = str[i];
if (ch < 'a' || ch > 'z')
{
continue;
}
counts[ch - 'a']++;
}
请注意,在C#(和.NET)中,char
与int
更相似,而不是string
。它们是一个数字(技术上是integral type),其值可以在0到65535之间,并且可以隐式转换为int
。在这里我正在玩它:-) a
是97而z
是122. 'z' - 'a' + 1
是122 - 97 + 1 == 26
,这是你需要的数组的大小。 ch - 'a'
会将a
和z
之间的字符转换为0到26之间的数字。因为'a' - 'a'
显然是{0},'b' - 'a'
是1,依此类推。< / p>
答案 1 :(得分:1)
为了计算字符数,您可以使用Dictionary
类型的单个变量,如下所示。
圈外
IDictionary<char, int> count = new Dictionary<char, int>();
在循环内部根据循环内部的字符增加值。
...
...
count['a']++;
...
...
count['b']++;
答案 2 :(得分:0)
int[] freq = new int[26]; // only 26 characters you are counting
for(char c = 'a'; c<='z'; c++)
{
freq[c-97] = data.Count(x => x == c); // data is a string of characters
}
答案 3 :(得分:0)
首先,我想了解您的代码有什么问题。
您没有string
您正在迭代,使用char
上的后缀增量运算符只能帮助您迭代一系列字符,但您的目标并非如此迭代az,但char
的每个string
。
string text = "This is a random string that I'll iterate through " +
"to find out how many instances of a character it contains";
Dictionary<char, int> Counter = new Dictionary<char, int>();
foreach (char c in text)
{
if (!Counter.ContainsKey(c))
{
Counter.Add(c, 0);
}
Counter[c] += 1;
}
foreach (var kv in Counter)
{
Console.WriteLine ("The character {0} occured {1} times", kv.Key, kv.Value);
}