我在编程方面非常不熟练,我正在尝试为我的班级完成这项任务。我看了整个互联网,但仍然找不到答案。
在这里,我有一段代码打印出字母及其在文本文件中发现的次数:
for (int i = 0; i < (int)char.MaxValue; i++)
{
if (c[i] > 0 &&
char.IsLetter((char)i))
{
Console.WriteLine("Letter: {0} Frequency: {1}",
(char)i,
c[i]);
}
我使用int count = s.Count(char.IsLetter)计算了代码中的字母数; 显然,划分c [i]是行不通的。我已经尝试了其他几种方法,但我不断收到错误。我觉得解决方案非常简单,但我根本看不到它。我希望你能愿意帮助我:)。
答案 0 :(得分:1)
您可以使用字典存储每个字母的频率。您也不应该使用约束i < (int)char.MaxValue
进行循环。这将使您超出范围,除非c
的长度为&gt; = char.MaxValue
。
var frequency = new Dictionary<char, int>();
for (var i = 0; i < c.Length; i++)
{
var current = (char)c[i];
if (current > 0 && char.IsLetter(current))
{
if (!frequency.ContainsKey(current))
frequency.Add(current);
frequency[current]++;
Console.WriteLine("Letter: {0} Frequency: {1}", current, frequency[current]);
}
}
答案 1 :(得分:0)
当你想要浮点除法时,也许你有一个整数除法?在这种情况下,将被除数或除数转换为double
(另一个将自动转换),例如:
(double)c[i] / count
编辑:由于你写了百分比,如果你需要乘以100,你还可以确保文字是double
,然后如果你仔细考虑运算符的优先级,你可以隐含所有的强制转换。例如:
Console.WriteLine($"Letter: {(char)i} Count: {c[i]} Percentage {c[i] * 100.0 / count}");
由于左关联性,乘法首先出现。文字100.0
的类型为double
。