[英]C# Problems while calculating Letter Frequency percentage
我的编程技能很差,我正在尝试完成我班上的这项任务。 我在Internet上四处寻找,但仍然找不到答案。
这里有一段代码,可以打印出字母以及在文本文件中被发现的次数:
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]相除是行不通的。 我尝试了其他几种方法,但我不断出错。 我觉得解决方案非常简单,但我根本看不到它。 我希望你会愿意帮助我:)
您可以使用字典来存储每个字母的频率。 您也不应使用约束i < (int)char.MaxValue
。 除非c
的长度> = 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]);
}
}
想要浮点除法时也许有整数除法? 在这种情况下,将红利或除数转换为double
(另一个将自动转换),例如:
(double)c[i] / count
编辑:由于您编写百分比 ,如果需要乘以一百,则还可以确保文字是double
,那么如果您对运算符的优先级谨慎,则可以将所有强制类型转换都隐含。 例:
Console.WriteLine($"Letter: {(char)i} Count: {c[i]} Percentage {c[i] * 100.0 / count}");
由于左相关性,乘法首先进行。 文字100.0
类型为double
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.