检查字符串中是否存在字符串,以及是否更改了该字符串中的字母

时间:2015-06-03 08:43:20

标签: c# string

我正在制作一个刽子手游戏。这是一个2人游戏,一个玩家将一个单词输入文本框。该单词显示有问号。

例如:

单词Hello将在?????中显示为TextBox

我遇到的问题是当玩家猜到一封信时,如何更改TextBox中的文字。如果玩家猜到TextBox中的“H”并输入它,我希望其他文字更改为H????。怎么做?

2 个答案:

答案 0 :(得分:0)

您可以使用类似以下BuildMask()方法的内容。当文本在第一个文本框中更改时,将其字符添加到哈希集中,调用BuildMask,然后将结果放入第二个TextBox。如果你想要不区分大小写,可以在hashset构造函数中添加IEqualityComparer,如果你谷歌它可以找到解决方案。

static void Main(string[] args)
{
    var guessThis = "Hello";
    var letters = new HashSet<char>();

    Console.WriteLine(BuildMask(guessThis, letters));
    letters.Add('l');
    Console.WriteLine(BuildMask(guessThis, letters));
    letters.Add('H');
    Console.WriteLine(BuildMask(guessThis, letters));
}

static string BuildMask(string toGuess, HashSet<char> letters)
{
    var result = new StringBuilder();

    foreach (var c in toGuess)
    {
        if (letters.Contains(c))
            result.Append(c);
        else
            result.Append('?');
    }

    return result.ToString();
}

答案 1 :(得分:0)

检查此完整代码

    public partial class MainWindow : Window
    { 
       string CurrentString = null;
       string modifiedstring = null;

      public MainWindow()
      {
          InitializeComponent();
       }



    private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
    {
        var textBox = sender as TextBox;
        string value = textBox.Text.Replace("\r\n", "").Replace("\n", "").Replace("\r", "");
        if (null != CurrentString)
        {
            if (CurrentString.Contains(value))
            {
                StringBuilder newstring = new StringBuilder();
                foreach (char c in CurrentString)
                {

                    if (value.ToLower().Equals(c.ToString()))
                    {
                        newstring.Append(value);
                    }
                    else
                    {
                        newstring.Append("?");
                    }
                }
                modifiedstring = newstring.ToString();
                text1.Text = modifiedstring;

            }

        }

    }

    private void TextBox_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            var textBox = sender as TextBox;
            string value = textBox.Text.Replace("\r\n", "").Replace("\n", "").Replace("\r", "");
            CurrentString = value;
            StringBuilder newstring = new StringBuilder();
            for (int i = 0; i < value.Length; i++)
            {
                newstring.Append("?");
            }
            textBox.Text = newstring.ToString();
        }
    }
        }
    }