c#每次运行循环时声明一个新变量来计算字符串的字符数

时间:2015-04-19 13:17:04

标签: c#

我想在每次运行循环时创建一个新变量,例如:

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
    }

4 个答案:

答案 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)中,charint更相似,而不是string。它们是一个数字(技术上是integral type),其值可以在0到65535之间,并且可以隐式转换为int。在这里我正在玩它:-) a是97而z是122. 'z' - 'a' + 1122 - 97 + 1 == 26,这是你需要的数组的大小。 ch - 'a'会将az之间的字符转换为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);
}

Char count