我正在尝试创建一个进程来计算给定输入字符串中每个字母的频率。到目前为止我的代码似乎工作正常,除了更新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");
}
}
}
答案 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());