我从用户那里得到一个字符串,然后把它放在一个char数组中.现在我想显示字符串中的所有字符以及它们出现的次数.我的代码如下请纠正我?
using System;
class count
{
public void charcount()
{
int i ;
int count = 0;
string s;
Console.WriteLine("Enter the String:");
s = Console.ReadLine();
char[] carr = s.ToCharArray();
for(i = 0; i < carr.Length; i++)
{
for(int j = 1; j < carr.Length; j++)
{
if(carr[j] == carr[i])
{
count++;
}
else
{
return;
}
Console.WriteLine("The Character " + carr[i] + " appears " + count);
}
}
}
static void Main()
{
count obj = new count();
obj.charcount();
}
}
Run Code Online (Sandbox Code Playgroud)
好吧,你的代码至少会遇到问题,因为你没有建立一个唯一字符列表,你可以在原始字符串中找到它们.任何出现多次字符的字符串都会显示奇怪的结果.
这是一个为您计算信息的LINQ表达式(您可以在LINQPad中运行它以立即查看结果):
void Main()
{
string s = "This is a test, with multiple characters";
var statistics =
from c in s
group c by c into g
select new { g.Key, count = g.Count() };
var mostFrequestFirst =
from entry in statistics
orderby entry.count descending
select entry;
foreach (var entry in mostFrequestFirst)
{
Debug.WriteLine("{0}: {1}", entry.Key, entry.count);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
: 6 <-- space t: 5 i: 4 s: 4 h: 3 a: 3 e: 3 l: 2 c: 2 r: 2 T: 1 ,: 1 w: 1 m: 1 u: 1 p: 1
如果您不能使用LINQ,这是一个不使用它的示例:
void Main()
{
string s = "This is a test, with multiple characters";
var occurances = new Dictionary<char, int>();
foreach (char c in s)
{
if (occurances.ContainsKey(c))
occurances[c] = occurances[c] + 1;
else
occurances[c] = 1;
}
foreach (var entry in occurances)
{
Debug.WriteLine("{0}: {1}", entry.Key, entry.Value);
}
}
Run Code Online (Sandbox Code Playgroud)