C#需要帮助在输入句子中查找匹配的单词

时间:2015-07-20 16:41:46

标签: c# string matching

好的,所以我遇到了麻烦。我有一个包含三个文本框和一个按钮的表单,在第一个文本框(textBox1)中,用户输入一个句子。在下一个文本框(textBox3)中,用户输入一个单词。然后用户单击一个按钮,第三个文本框(textBox2)检查输入的单词是否与句子中的单词匹配。我不能使用任何类型的"快捷方式",我只能做很长的路(没有。比较或类似的东西)。这就是我到目前为止所拥有的:

 private void button1_Click(object sender, EventArgs e)
  {



        string inSentence = textBox1.Text.ToUpper();

        string txtB2 = textBox3.Text.ToUpper();

        string[] inWord;

        inWord = inSentence.Split(' ');

        int wordCount = inWord.Length;

        for (int i = 0; i < wordCount; i++)
        {
            if (txtB2 == inWord[i])
            {
                textBox2.Text = "Yes";
            }
            else
                textBox2.Text = "No";
        }

  }

我遇到的问题是,如果我输入&#34;嗨,我是&#34;在第一个框中,唯一匹配的单词是&#34; me&#34;。它只匹配最后一个单词。它并不匹配所有东西。

同样,我只能以某种方式解决这个问题。我只是想知道我哪里出错了,为什么。如果有人可以帮助我,我将不胜感激。

我也尝试过使用这个

  foreach (string n in inWord)
        {
            textBox2.Text = inWord + " ";
            for (int i = 0; i < wordCount; i++)
            {

                if (txtB2 == n)
                {
                    textBox2.Text = "Yes " + n;
                }
                else
                    textBox2.Text = "No " + n;
            }
        }

我遇到了同样的问题(我在文本输出中添加了&#34; n&#34;以检查它将在哪个单词上,并且它始终在&#34;我&#34;当我输入&#34;嗨,我#34;)。

6 个答案:

答案 0 :(得分:1)

问题:&#34;问题&#34;在你的代码中,始终检查每个单词。找到匹配项后,循环不会停止。

解决方案:在将文本框设置为&#34;是&#34; <后,在return;语句中添加break(或if)语句/ p>

答案 1 :(得分:0)

不使用正则表达式或IndexOf,并假设您必须使用非常低效的方法迭代下面表达的每个单词,您需要在找到匹配时中断循环的执行。您应该使用while结构而不是for循环来实现此目的。

bool found = false;
int i = 0;
while (!found && i < wordCount)
{
    if (txtB2 == inWord[i])
    {
        textBox2.Text = "Yes";
        found = true;
    }
    else
        textBox2.Text = "No";

    i++;
}

答案 2 :(得分:0)

尝试使用regExp

string text = "Your sentence";
string pat = "[^\s]word[$\s]"; //[rowstart or whitespace]word[rowend or whitespace]
Regex r = new Regex(pat, RegexOptions.IgnoreCase);
Match m = r.Match(text);
if(m.Success) {
   // The sentence contains the word
}

答案 3 :(得分:0)

你正在做的是每次循环整个句子。您检查每个单词,包括最后一个单词和textBox2.Text正在更改每个单词。你看到的是最后一句话的结果。

    textBox2.Text == "No"; // Initially set the text to "No"
    for (int i = 0; i < wordCount; i++)
    {
        if (txtB2 == inWord[i])
        {
            textBox2.Text = "Yes"; // If a matching word is found change text to yes
            break;
        }
    }

如果你想使用foreach,可以省略其他for循环内容:

textBox2.Text = "No";
foreach(string word in inWord)
{
    if(txtB2 == word)
        textBox2.Text = "Yes";
}

foreach通过循环inWord并将当前元素的值放入word

来工作

答案 4 :(得分:0)

如果唯一的限制是您不使用正则表达式,那么您可以执行类似这样的操作

   var wordArray =  textBox1.Text.ToUpper().Split(" ");
    var response = wordArray.Where(x=> x.Trim().Equals(textbox2Input.ToUpper());
//the base implementation of the equals method on strings is enough

if(response.Any())
        textbox3.Text ="Yes";
    else 
    textbox3.Text="NO"

答案 5 :(得分:0)

如果您想要一个实用的方法来解决问题,那就是:

var inSentence = textBox1.Text;
var wordToFind = textBox3.Text;

var wordFound = Regex.IsMatch(@"\b" + inSentence + @"\b", wordToFind, RegexOptions.IgnoreCase);

如果这是一项人为的学校作业,那么1.你的老师应该提出更好的练习2.你真的需要自己做这项工作。