好的,所以我遇到了麻烦。我有一个包含三个文本框和一个按钮的表单,在第一个文本框(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;)。
答案 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.你真的需要自己做这项工作。