有没有办法修改这个循环?

use*_*842 3 c#

所以我试图让这个代码测试用户输入的单词中是否有某些字母,并确定该用户输入中有多少该特定字母。

目前aCounterbCounter如果我输入这个词,我会得到 4 for和 4 for "aabb"

我如何做到这一点,例如,如果有 2 个 a 并且它已经测试了2 次,则测试字母的循环会"a"停止"a"

static int aCounter, bCounter;

public static void Main (string[] args)
{
    Console.Write("Enter the secret word: ");
    string word = Console.ReadLine();

    for(int i = 0; word.Length > i; i++)
    {       
        if (word.Count(letter => letter == 'a') > 0)
        {
            Console.WriteLine("\nThe word contains a");
            aCounter++;
        }

        if (word.Count(letter => letter == 'b') > 0)
        {
            Console.WriteLine("\nThe word contains b");
            bCounter++;
        }

        if (aCounter > 0)
        {
            Console.WriteLine(aCounter);
        }

        if (bCounter > 0)
        {
            Console.WriteLine(bCounter);
        }
}
Run Code Online (Sandbox Code Playgroud)

AAA*_*ddd 7

您似乎将linq循环混合

我猜这更符合你想要的(通过删除循环)

Console.Write("Enter the secret word: ");
string word = Console.ReadLine();

aCounter = word.Count(letter => letter == 'a');
bCounter = word.Count(letter => letter == 'b');

if (aCounter > 0)
   Console.WriteLine($"The word contains a : {aCounter}");

if (bCounter > 0)
   Console.WriteLine($"The word contains b : {bCounter}");
Run Code Online (Sandbox Code Playgroud)

输出

Enter the secret word: aabb
The word contains a : 2
The word contains b : 2
Run Code Online (Sandbox Code Playgroud)

您还可以指望所有角色出现,并把它们放到一个字典,然后测试明确

var letters = word.GroupBy(x => x)
                  .ToDictionary(x => x.Key, x => x.Count());

if (letters.TryGetValue('a', out var aCount))
   Console.WriteLine($"The word contains a : {aCount}");

if (letters.TryGetValue('a', out var bCount))
   Console.WriteLine($"The word contains b : {bCount}");
Run Code Online (Sandbox Code Playgroud)