【问题标题】:C# How to Compare a letter or letters to another stringC#如何将一个或多个字母与另一个字符串进行比较
【发布时间】:2018-03-12 10:24:41
【问题描述】:

所以我正在制作一个刽子手游戏来练习我的 C# 技能,但我遇到了一个问题,我无法弄清楚如何循环遍历随机选择的单词并比较用户在文本框中的选择。我知道如何获取用户输入并将其转换为变量字符串。但不是如何比较它并删除 * 并用正确的字母替换它。

    using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace Guess_The_Word
{

    public partial class Form1 : Form
    {
        private int wrongGuesses = 0;
        private int userGuesses;
        private string secretWord = String.Empty;
        private string[] words;
        private string currentWord = string.Empty;
        private string userGuess = string.Empty;


        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            string path = (@"C:\commonwords.txt"); // Save the variable path with the path to the txt file
            words = File.ReadAllLines(path);
            int guessIndex = (new Random()).Next(words.Length);
            currentWord = words[guessIndex];

            char[] currentWordCharArray = currentWord.ToCharArray();

            foreach (char c in currentWordCharArray)
            {
                currentWord.Contains(userInputBox.Text);

                wordlbl.Text += "*";
            }



        }

        private void guessBtn_Click(object sender, EventArgs e)
        {

        }


        private void resetGamebtn_Click(object sender, EventArgs e)
        {


        }
    }
}

【问题讨论】:

  • 看起来您可能还需要将用户输入转换为 char 数组,然后将随机单词的第一个索引与用户输入框的第一个索引进行比较,并对其他人。
  • 我已经把用户的猜测变成了char数组,我会用什么方法来比较两个char数组呢?
  • 也许我跳得太远了,或者我需要考虑一下,明天再回顾一下。
  • 我想问题是您是一次检查整个单词?还是您正在逐字输入?,用户输入的字母或单词是什么?
  • 在下面添加了一个示例,以便您可以从中构建一个示例

标签: c# string search compare substring


【解决方案1】:

这是一个带有示例的控制台应用程序,您可以从这里构建。这不会为您替换 * 或您打算做什么,但它会帮助您作为起点。

using System;

    public class Program
    {
        public static void Main()
        {
            string randomInput = "Apple";
            string userInput = "Apple";


            //Word lengths are not equal therefore user has lost already
            if(randomInput.Length != userInput.Length){
                Console.WriteLine("User has not guessed the word, your word is not the same size as the random one.");
                return;
            }


            char[] randomCharArray = randomInput.ToLowerInvariant().ToCharArray();
            char[] userInputArray = userInput.ToLowerInvariant().ToCharArray();

            for(int i = 0; i < randomCharArray.Length; i++)
            {
                if(randomCharArray[i] == userInputArray[i])
                    continue;
                else{
                    Console.WriteLine("You have not guessed the word, keep trying!");
                    return;
                }
            }

            Console.WriteLine(string.Format("You have won!, you have guessed the word {0}",userInput));

        }

    }

【讨论】:

  • 当前在为单词的每个字母显示 * foreach (char c in currentWord) { displaylbl.Text = "*"; }
【解决方案2】:

如果是这样:

char a = 'x';
char b = 'y';

然后您可以使用 if 语句,例如 if (a == b),您可以将此结果用作输出,例如正确答案位置的布尔值列表。

您需要循环 currentWordCharArray 并检查 userInputCharArray(转换为 ToCharArray),并且需要确保您没有检查 userInputCharArray。我的意思是 currentWordCharArray 可以有 7 个字母,您可以显示正确单词的字符数,无论如何用户可以使用没有 7 个字母的输入单词。毕竟收集真假来显示哪个字母是对的。

编辑:

private void guessBtn_Click(object sender, EventArgs e)
    {
        char[] currentWordCharArray = currentWord.ToCharArray();
        char[] userGuessCharArray = userInputBox.Text.ToCharArray();
        int lengthOfAnswer = currentWordCharArray.Length;
        List<char> progressInformer = new List<char>();

        for (int i = 0; i < lengthOfAnswer; i++)
        {
            if (i < userGuessCharArray.Length)
            {
                if (currentWordCharArray[i] == userGuessCharArray[i])
                {
                    progressInformer.Add(currentWordCharArray[i]);
                }
                else
                {
                    progressInformer.Add('*');
                }
            }
            else
            {
                progressInformer.Add('*');
            }
        }
    }

你无法想象的循环在上面。如果在正确的位置正确猜到,progressInformer 将包含真字母,否则为错误字母的 Wild char(mean '*')。例如;如果您的系统选择“斜体”作为单词并且用户猜测为“意大利”,那么 progressInformer 将是一个类似于

的字符列表
List<char> progressInformer = new List<char> { 'i', 't', 'a', 'l', '*', '*' };

我的解决方案中还有什么不明白的部分吗?

干杯!

【讨论】:

  • 所以我确实需要一个for循环,只需要考虑如何实现它。 char 的想法很好,但它很长而且不需要,但我可能需要这样做。因为我什至想不出如何循环和索引
  • @LiamVallance 嘿,我帮你。请检查一下,如果有问题,请告诉我。如果对您有用,请不要忘记将其标记为答案。
  • 可悲的是,我仍在努力通过我厚实的大脑来解决它。这一点对我来说很奇怪,因为你可以告诉我循环让我感到困惑 if (currentWordCharArray[i] == userGuessToCharArray[i]) not sure why that works what i do?
  • 因此,您需要了解有关数组和 if 语句的更多信息。您应该知道 currentWordCharArray[0] 等于一个字符,它是数组中的第一个字母。另一方面,您可以将两个 char 与 == 和 != 语句进行比较,就像比较两个整数相等和不等一样。
  • 据我了解,for 循环是遍历每个索引,从而遍历每个 char[] 数组
猜你喜欢
  • 1970-01-01
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
相关资源
最近更新 更多