刽子手字符串 char StringBuilder

问题描述 投票:0回答:1

我在做一款生挂文字游戏,作为速成的编码练习。现在,我的 空白 应该变成正确选择的字母,同时留下下划线作为其他字母的占位符,但相反,我所有的 空白 被转换为当前选择的正确字母。例如,如果我的单词(分词)是'bag',我猜是'a',我所有的空白都变成了'a';而不是想要的输出'_ a _'。

using System;
using System.Text;

class Hang {
  public static string blanks = "_";
  public static string hangParts = "_____,|___|,  |  ,  O  , /|\\ , / \\ ";
  public static int tries = 0;
  public static void PrintHang(){
    Console.WriteLine("What's your word? ");
    string wordDisp = Console.ReadLine();
    char[] charDisp = wordDisp.ToCharArray();
    string stringDisp = charDisp.ToString();
    StringBuilder temp = new StringBuilder();
    for(var i=0; i<charDisp.Length;i++){
       temp.Append(blanks);
    } 
    Console.WriteLine(charDisp.Length);
    Console.WriteLine(temp);

    while(tries < 6){

      for(var s=0;tries<6; s++){
        Console.WriteLine("What's your letter? ");
        var pick = Console.ReadLine();
        if(charDisp[s].ToString().Contains(pick)){
          temp.Replace(temp[s],Convert.ToChar(pick));
          Console.WriteLine(temp);
        }
        else{
          tries++;
          Console.WriteLine(hangParts[s]);
        }
      }
    }

  }


}

class Prog{
  public static void Main(){
    Hang.PrintHang();
  }
}
c#
1个回答
1
投票

问题是 temp.Replace(temp[s],Convert.ToChar(pick)) 你将下划线替换为Console.ReadLine()中字符串的第1个字符,但temp的所有字符都以下划线开始。 所以每个字母都被设置为你输入的第1个字母。

你需要以某种方式映射目标字符串中每个字母的索引位置。 你还需要考虑到输入字符串中有多个字母是相同的 "hello",例如有2个 "l"。

然后你可以根据目标字符串中的索引,用正确的字母替换你的下划线。

还有一些其他的事情...

你可能不需要使用char数组。 你可以直接用字符串 wordDisp.Contains(pick)来进行包含。

另外,你在使用 "tries "的方式上有个错误。 你应该去掉 "for "循环,在 "misses "达到一定数量后退出即可。 你还需要考虑到用户已经成功匹配了所有字母--打印一些东西让他们知道他们匹配了,然后退出。

© www.soinside.com 2019 - 2024. All rights reserved.