C# 字符串对象中字符频率的简单解决方案

C# 字符串对象中字符频率的简单解决方案,c#,character,frequency,C#,Character,Frequency,我要做的任务是显示字符串对象中每个字符的频率,因为我已经完成了部分代码,只是在我脑海中没有完成这项任务的简单概念。到目前为止,我认为将char更改为int类型可能是有用的。值得一提的是,我希望避免使用该部分:if letter=='a'NumberCount++;好像为这个简单的任务写那么多条件是没有效率的,我正在考虑用上面提到的方法来做。如果有任何关于如何进一步编写代码的建议,我将不胜感激……我是c语言的初学者 class Program { static void Main(st

我要做的任务是显示字符串对象中每个字符的频率,因为我已经完成了部分代码,只是在我脑海中没有完成这项任务的简单概念。到目前为止,我认为将char更改为int类型可能是有用的。值得一提的是,我希望避免使用该部分:if letter=='a'NumberCount++;好像为这个简单的任务写那么多条件是没有效率的,我正在考虑用上面提到的方法来做。如果有任何关于如何进一步编写代码的建议,我将不胜感激……我是c语言的初学者

 class Program
 {
    static void Main(string[] args)
    {
       string sign = "attitude";
       for (int i = 0; i < sign.Length; i++)
       {
          int number = sign[i]; // changing char into int

       } 

您可以使用Linq轻松完成此操作,如:

 string sign = "attitude";
 int count = sign.Count(x=> x== 'a');
或者,如果要计算所有字符数,则:

 string sign = "attitude";
 var alphabetsCount = sign.GroupBy(x=> x)
                          .Select(x=>new 
                                    {
                                      Character = x.Key, 
                                      Count = x.Count()
                                    });
更新: 如果没有Linq,您可以通过循环完成,并在字典中跟踪它,如:

string sign = "attitude";
Dictionary<char,int> dic = new Dictionary<char,int>();
foreach(var alphabet in sign)
{
    if(dic.ContainsKey(alphabet))
        dic[alphabet] = dic[alphabet] +1;
    else
        dic.Add(alphabet,1);
}

您可以使用Linq轻松完成此操作,如:

 string sign = "attitude";
 int count = sign.Count(x=> x== 'a');
或者,如果要计算所有字符数,则:

 string sign = "attitude";
 var alphabetsCount = sign.GroupBy(x=> x)
                          .Select(x=>new 
                                    {
                                      Character = x.Key, 
                                      Count = x.Count()
                                    });
更新: 如果没有Linq,您可以通过循环完成,并在字典中跟踪它,如:

string sign = "attitude";
Dictionary<char,int> dic = new Dictionary<char,int>();
foreach(var alphabet in sign)
{
    if(dic.ContainsKey(alphabet))
        dic[alphabet] = dic[alphabet] +1;
    else
        dic.Add(alphabet,1);
}

这里有一个非Linq方法来获取所有唯一字母的计数

var characterCount= new Dictionary<char,int>();
foreach(var c in sign)
{
    if(characterCount.ContainsKey(c))
        characterCount[c]++;
    else
        characterCount[c] = 1;
}
还是为了得到所有的计数

foreach(var pair in characterCount)
{
    Console.WriteLine("{0} - {1}", pair.Key, pair.Value);
}

这里有一个非Linq方法来获取所有唯一字母的计数

var characterCount= new Dictionary<char,int>();
foreach(var c in sign)
{
    if(characterCount.ContainsKey(c))
        characterCount[c]++;
    else
        characterCount[c] = 1;
}
还是为了得到所有的计数

foreach(var pair in characterCount)
{
    Console.WriteLine("{0} - {1}", pair.Key, pair.Value);
}

如果你想在没有Linq的情况下做到这一点,那就试试吧

var charDictionary = new Dictionary<char, int>();
string sign = "attitude";
foreach(char currentChar in sign)
{
    if(charDictionary.ContainsKey(currentChar))
    { charDictionary[currentChar]++; }
    else
    { charDictionary.Add(currentChar, 1); }
}

如果你想在没有Linq的情况下做到这一点,那就试试吧

var charDictionary = new Dictionary<char, int>();
string sign = "attitude";
foreach(char currentChar in sign)
{
    if(charDictionary.ContainsKey(currentChar))
    { charDictionary[currentChar]++; }
    else
    { charDictionary.Add(currentChar, 1); }
}


有没有一种不使用内置c函数的方法:?@ArturS你是说不使用Linq?是的,这正是我的意思,然后你必须使用for循环并使用字典,因为有一种不使用内置c函数的方法:?@ArturS你是指不使用Linq吗?是的,这正是我的意思,然后你必须使用for循环并使用字典你想知道每个字符在一个字符串中出现了多少次?例如,对于你的态度,你会有:a-1t-3i-1u-1d-1e-1?我不明白如果你想数一数字母a出现了多少次,你会如何避免ifletter=='a'?字符的int值与计数有什么关系?我在想单个字符的ASCI,可能是usefull@NicholasEllingson这正是我想做的你需要思考的。。请把你想做的事情告诉我们。你想确定每封信出现多少次吗?如果是,则说明。。这也没那么难@Arturs听起来你更希望有人能给你提供答案。。你可以很容易地用谷歌搜索这个例子谷歌一直在为我工作你想知道每个字符在一个字符串中出现多少次?例如,对于你的态度,你会有:a-1t-3i-1u-1d-1e-1?我不明白如果你想数一数字母a出现了多少次,你会如何避免ifletter=='a'?字符的int值与计数有什么关系?我在想单个字符的ASCI,可能是usefull@NicholasEllingson这正是我想做的你需要思考的。。请把你想做的事情告诉我们。你想确定每封信出现多少次吗?如果是,则说明。。这也没那么难@Arturs听起来你更希望有人能给你提供答案。。你可以很容易地用谷歌搜索这个例子谷歌一直在为我工作他想计算所有字母的数量所以我想应该是a=1 t=3…等等…@MethodMan我不确定我是否完全明白,但是我已经更新了,展示了如何通过迭代字典来获得所有的唯一字符计数。加上1的更新和答案@ArturS最初并不清楚。我要感谢你们所有人的支持:我一定会分析你们的建议:他想要对所有字母进行计数,所以我想应该是a=1 t=3……等等。@MethodMan我不是当然,我完全明白,但是我已经更新了,展示了如何通过迭代字典来获得所有的唯一字符计数。对于更新和回答@ArturS,加上1最初并不清楚。我要感谢你们所有人的支持:我肯定会分析你们的建议:因为字符串实现了IEnumerable,所以你们不需要进行排序。我从未意识到这一点之前,谢谢。这也会使事情进展得更快,因为这样就不会有到数组的转换。因为字符串实现了IEnumerable,所以您不需要进行hararray。我以前从未意识到这一点,谢谢。这也会使事情进展得更快,因为这样就不会有到数组的转换。虽然这段代码可能会解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设
y、 虽然这段代码可以解决这个问题,但如何以及为什么解决这个问题将真正有助于提高您的帖子质量,并可能导致更多的投票。请记住,你是在将来回答读者的问题,而不仅仅是现在提问的人。请在回答中添加解释,并说明适用的限制和假设。