如何处理多个字符串值并将这些字符串值与用户输入进行比较? [复制]
Posted
技术标签:
【中文标题】如何处理多个字符串值并将这些字符串值与用户输入进行比较? [复制]【英文标题】:How to deal with multiple string values and compare those string values with the user input? [duplicate] 【发布时间】:2021-02-21 10:19:40 【问题描述】:using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Security.Cryptography.X509Certificates;
using UnityEngine;
using UnityEngine.UI;
public class LetterRandomiser : MonoBehaviour
public char[] characters;
public Text textbox;
public InputField mainInputField;
public string[] lines;
void Start()
char c = characters[Random.Range(0, characters.Length)];
char d = characters[Random.Range(0, characters.Length)];
textbox.text = c.ToString() + d.ToString();
lines = System.IO.File.ReadAllLines(@"C:\Users\lluc\Downloads\corncob_lowercase.txt");
void wordIsInFile(string word)
foreach (var item in lines)
if (word == item)
char c = characters[Random.Range(0, characters.Length)];
char d = characters[Random.Range(0, characters.Length)];
textbox.text = c.ToString() + d.ToString();
mainInputField.text = "";
else
mainInputField.text = "";
void Update()
if (Input.GetKeyDown(KeyCode.Return) && mainInputField.text.Contains(textbox.text) == true)
wordIsInFile(mainInputField.text);
else if (Input.GetKeyDown(KeyCode.Return) && mainInputField.text.Contains(textbox.text) == false)
wordIsInFile(mainInputField.text);
Reference to my game
我的问题:
我想让玩家必须猜测一个包含两个随机生成的字母的单词(显示在输入字段上方)。
然而,到目前为止,玩家可以输入一个仅包含两个随机生成的字母中的一个的单词,并且程序仍然会接受他们的输入。
我不希望这种情况发生。我想对游戏进行编程,使其在包含随机生成的两个字母而不只是一个字母之前不会接受玩家的输入。
例如,在我向您展示的图像中,我可以输入“joker”,它会接受输入并生成一组新的随机生成的字母。然而,joker 只有一个“j”而不是一个“z”,所以它不应该是正确的。唯一应该接受的词是同时包含 J 和 Z 的词,即爵士乐
【问题讨论】:
如果在这两种情况下你都做同样的事情,你检查Contains(text box.text)
有什么用?
【参考方案1】:
您可以使用String.Contains()
。
假设一组字母在一个字符串中进行比较:
string lettersToCompare;
并且您的用户输入是另一个字符串,例如:
string userInput;
你可以这样做:
string lettersToCompare;
string userInput;
bool isMatchingAllCharacters = true;
//Compare each character of the string
foreach (char c in lettersToCompare.ToCharArray())
//if the userInput do not contain this character, you already now it won't match every character.
if (!userInput.Contains(c.ToString()))
isMatchingAllCharacters = false;
break;
if (isMatchingAllCharacters)
Debug.Log("All matched");
else
Debug.Log("Something do not match");
如果您使用LinQ
,则可以避免char-string
转换:
using System.Linq;
string lettersToCompare;
string userInput;
bool isMatchingAllCharacters = true;
//Compare each character of the string
foreach (char c in lettersToCompare)
//if the userInput do not contain this character, you already now it won't match every character.
if (!userInput.Contains(c))
isMatchingAllCharacters = false;
break;
if (isMatchingAllCharacters)
Debug.Log("All matched");
else
Debug.Log("Something do not match");
【讨论】:
Assets\Scripts\LetterRandomiser.cs(52,46): error CS1503: Argument 1: cannot convert from 'char' to 'string' @greatvortex 已修复,之前的代码使用 LinQ 无需更改即可工作 还是不行。 @greatvortex 我已经测试过自己,所以它似乎有效。告诉我你有什么错误 @greatvortex 你确定你的随机字母和你的用户输入被正确过滤了吗?因为我正在检查,它运行良好:dotnetfiddle.net/ItaAkH【参考方案2】:从System.Linq()
使用Intersect()
怎么样?
string
generatedLetters = "jz",
userInput = "joker";
if (generatedLetters.Intersect(userInput).Count() == userInput.Length)
//yes! good!
else
//too bad..
Intersect()
字符数必须与generatedLetters
字符数匹配才能满足您的条件。
【讨论】:
Intersection() char count must match the generatedLetters char count to meet your conditions.
这是正确的,但在您的代码中是错误的;)目前您正在检查整个 userInput.Length 是否匹配;)它应该是if(generatedLetters.Intersect(userInput).Count() == generatedLetters.Length)
使用您的代码时没有错误。但是,它仍然会接受不正确的单词。这是更新的代码。 pastebin.com/NWDrg3dc
derHugo 的修正仍然无效。
@greatvortex 哦,抱歉,我忘记了您要求进行单词检查的部分。我会用你的代码编辑答案。
@greatvortex 这也适用于 btw 见dotnetfiddle.net/nEDshp以上是关于如何处理多个字符串值并将这些字符串值与用户输入进行比较? [复制]的主要内容,如果未能解决你的问题,请参考以下文章