如何获取字符串中两个相同字符的索引?

时间:2018-09-09 18:47:00

标签: c#

我想创建一个简单的控制台wingman游戏。我的错误是,如果我尝试在单词中获得2个相同字符的pos,我只会得到一个而另一个被跳过。 例如Tomatoe。

控制台输出:

蕃茄

_ _ _

我知道我不使用直播,没有时间去做。

班级计划{

   static string[] word = { "Pineapple", "Apple" , "Tomatoe" , "Pizza"};

    static int wordIndex = 0;

    static char[] randomWord;

    static bool guessing = true;

    public static void Main(string[] args)

    {
        int lives = 3;
        Console.OutputEncoding = Encoding.UTF8;
        Console.InputEncoding = Encoding.UTF8;
        Random r = new Random();
        wordIndex = r.Next(word.Length);
        randomWord = word[wordIndex].ToLower().ToCharArray();
         char[] randomWordcensored = new char[randomWord.Length];
        for (int i = 0; i < randomWord.Length; i++)
        {
            randomWordcensored[i] = '_';
        }
        Console.WriteLine("Hello");
        foreach (var item in randomWordcensored)
        {
            Console.Write(item + " ");
        }
        Console.WriteLine();
        Console.WriteLine("Please Enter character:");

        while (guessing = true)
        {
            int g = 0;
            char userinput;
            bool security = char.TryParse(Console.ReadLine() ,out userinput);
            if (security == true) { 

            if (randomWord.Contains(userinput))
            {        //help needed
                    g = (word[wordIndex].ToString().IndexOf(userinput) == -1  ? 0 : word[wordIndex].ToString().IndexOf(userinput));
                    randomWordcensored[g] = userinput;
                Console.WriteLine("Good :) " + g);
                    foreach (var item in randomWordcensored)
                    {
                        Console.Write(item + " ");
                    }
            }

            else
            {
                    lives--;
                Console.WriteLine("Wrong!\n-Lives:" + lives);

            }

        }
            else
            {
                Console.WriteLine("Enter only one charracter!");
            }
        }

    }


    }

1 个答案:

答案 0 :(得分:0)

您将要处理可能与大小写不同的用户输入。因此,最简单的方法是只访问随机单词中的每个字符一次。

这里是a REPL that I made来解决这个问题:

using System;
using System.Collections.Generic;

class MainClass {
    public static void Main (string[] args) {
        var word = "Tomato";
        var input = "t";
        var letter = input.ToLower()[0];

        var indices = new List<int>();
        for(var i = 0; i < word.Length; i++)
            if (word.ToLower()[i] == letter)
                indices.Add(i);

        Console.WriteLine($"Secret word: {word}");
        Console.WriteLine($"User guess: {input}");
        Console.WriteLine($"Found at {String.Join(", ", indices)}");
    }
}

及其输出:

Mono C# compiler version 4.0.4.0
Secret word: Tomato
User guess: t
Found at 0, 4