在Int Array C#中更改给定索引处的值

时间:2015-01-14 20:12:11

标签: c# arrays for-loop int counting

我正在尝试创建一个进程来计算给定输入字符串中每个字母的频率。到目前为止我的代码似乎工作正常,除了更新int数组中给定索引的int值。当我调试代码时,它成功地找到了与当前字符对应的字符串数组的索引,因此看起来问题出在以下行:alphabetCount[index] = alphabetCount[index]++;

这是代码。

    string[] alphabet = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
    int[] alphabetCount = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
    string baseInput = string.Empty;

    private void button_count1_Click(object sender, EventArgs e)
    {
        baseInput = textBox_base.Text.ToUpper();
        int length = baseInput.Length;

        for (int i = 0; i < length; i++)
        {
            try
            {
                int index = Array.IndexOf(alphabet,baseInput[i].ToString());
                alphabetCount[index] = alphabetCount[index]++;
            }
            catch
            {
                //MessageBox.Show("nope");
            }
        }
    }

3 个答案:

答案 0 :(得分:0)

问题是alphabetCount[index]++首先分配alphabetCount[index],然后递增该值。您需要使用预增量运算符:

alphabetCount[index] = ++alphabetCount[index];

您可以像这样简单地重现此行为:

var arr = new int[2];
arr[0] = arr[0]++;

Console.Write(arr[0]); // 0

答案 1 :(得分:0)

您可以简化计数器。

int[] alphabetCount =
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
string baseInput = string.Empty;

private void button_count1_Click(object sender, EventArgs e)
{
    baseInput = textBox_base.Text.ToUpper();

    foreach(var character in baseInput)
    {
        if(char.IsLetter(baseInput))
        {
            // A is ASCII 65, Z is ASCII 90
            // Subtract 65 to put it in the alphabetCount range
            var index = character - 65;
            alphabetCount[index]++;
        }
    }
}

答案 2 :(得分:-2)

您只需撰写alphabetCount[index]++;alphabetCount[index] = alphabetCount[index]+1;(相当于)

或者您使用linq:

string words = "Hello World";
Dictionary<char, int> counted = words.ToUpper().GroupBy(ch => ch).OrderBy(g => g.Key).ToDictionary(g => g.Key, g => g.Count());
相关问题