如何检查多个文本框中的单词

时间:2015-03-11 20:51:08

标签: c#

我的表格

screenshot

文本框中输入的单词必须与上面任意一个随机字符生成的文本框匹配,并且单词必须包含黄色的char。

请帮助解决这两个验证

  1. 检查单词中是否有任何字符 包含,黄色文本框中的字符。

  2. 单词中的剩余字符出现在任何文本中 框。

2 个答案:

答案 0 :(得分:1)

您所需要的只是获取以黄色显示的标签的值,并执行类似的操作。

string holdWord = textBox1.Text; //BEEP
char charToCheck = Convert.ToChar(label1.Text); // 'E'

bool result = holdWord.Contains(charToCheck); //TRUE

答案 1 :(得分:1)

冒着交出解决方案的风险......

第一个案例

这符合标准(我能说的最好)。

Boolean IsAcceptableWord(String input, Char yellowLetter, params Char[] textBoxLetters)
{
    // Short-circuit: Empty is empty
    if (String.IsNullOrEmpty(input)) return false;

    // yellow letter
    if (!input.Contains(yellowLetter.ToString())) return false;

    // textBox letters
    foreach (var inputLetter in input)
    {
        if (textBoxLetters.Contains(inputLetter)) return true;
    }

    return false;
}

第二种情况

这个更精细一点。我使用的标准是:

  • 不得为空字符串。
  • 必须只有黄色字符出现一次。
  • 剩余字母必须由每个textBox字符的单独使用组成。 (举个例子,你不能使用Q,也不能使用Z两次以上。)
Boolean IsAcceptableWord2(String input, Char yellowLetter, params Char[] textBoxLetters)
{
    // Short-circuit: must not be empty
    if (String.IsNullOrEmpty(input))
    {
        return false;
    }

    // Validation
    if (textBoxLetters == null || textBoxLetters.Length == 0)
    {
        throw new ArgumentNullException("textBoxLetters");
    }
    if (!Char.IsLetter(yellowLetter))
    {
        throw new ArgumentException("Must be a letter", "yellowLetter");
    }
    if (textBoxLetters.Any(x => !Char.IsLetter(x)))
    {
        throw new ArgumentException("Must be all letters", "textBoxLetters");
    }

    // Normalization
    input = input.ToLowerInvariant();
    yellowLetter = Char.ToLower(yellowLetter);
    textBoxLetters = textBoxLetters.Select(x => Char.ToLower(x)).ToArray();
    var inputCharArray = input.ToCharArray();

    // Comparisons
    var yellowLetterCount = inputCharArray.Count(x => x == yellowLetter);
    if (yellowLetterCount != 1)
    {
        return false;
    }
    var remainingInputLetters = inputCharArray.Where(x => x != yellowLetter).ToList();
    foreach (var textBoxLetter in textBoxLetters)
    {
        var i = remainingInputLetters.IndexOf(textBoxLetter);
        if (i > -1)
        {
            remainingInputLetters.RemoveAt(i);
        }
    }
    return (remainingInputLetters.Count == 0);
}

试验:

Word      | Result   | Reason
----------|----------|--------------------
BEEP      | Fail     | Too many 'E's
BUZZ      | Fail     | No 'U's
PEZ       | Pass     |
BEZZ      | Pass     |
QUIZ      | Fail     | No 'U's or 'I's
          | Fail     | (empty)