函数不进入for循环
Function doesn't go into for loop
我正在尝试编写自己的函数,它获取 2 个字符串,并判断第一个是否包含第二个作为单词(意思是单词被“”或“,”包围)当我测试时它对于字符串 "squawk, squeal" 和 "squawk",它是 ok
,它进入第二个 for 循环(带有 j
的循环)并输出 1,但是对于 "squeal" 它根本不会进入 j
循环。这是我目前的代码:
bool containsMeaning(string bigMeaning, string smallMeaning)
{
unsigned int smallCounter = 0;
unsigned int matchBeginning = 0;
unsigned int matchEnd = 0;
for (unsigned int i = 0; i < bigMeaning.size() - smallMeaning.size() + 1; i++)
{
cout << "i = " << i << endl;
smallCounter = 0;
if (bigMeaning[i] == smallMeaning[0])
{
matchBeginning = 0;
cout << "I'm inside the if " << i << endl;
for (unsigned int j = i; j < smallMeaning.size(); j++)
{
cout << "big char " << bigMeaning[j] << " small char " << smallMeaning[smallCounter] << endl;
if (bigMeaning[j] != smallMeaning[smallCounter])
{
cout << "I want to break free" << j << endl;
break;
}
else
{
matchEnd = j;
smallCounter++;
cout << "j = " << j << " smallcoutner = " << smallCounter << endl;
}
}
if (smallCounter == smallMeaning.size() &&
(matchBeginning == 0 || bigMeaning[matchBeginning - 1] == ' ' || bigMeaning[matchBeginning - 1] == ',')
&& (bigMeaning[matchEnd + 1] == '[=10=]' || bigMeaning[matchEnd + 1] == ' ' || bigMeaning[matchEnd + 1] == ','))
return true;
}
}
return false;
}
问题出在第二个for
循环中的条件上。您在那里所做的事情存在逻辑错误。您设置 j = i
的目的是拥有一个计数器,该计数器将遍历两个字符串,逐个字符地比较它们。但是,第一个 for 循环中的 i
遍历较大的字符串,没有理由让它小于较小字符串的大小,这就是您在 j < smallMeaning.size()
命令。
相反,您的 for
循环应该 for (int j = i; j < i + smallMeaning.size(); j++)
。
我正在尝试编写自己的函数,它获取 2 个字符串,并判断第一个是否包含第二个作为单词(意思是单词被“”或“,”包围)当我测试时它对于字符串 "squawk, squeal" 和 "squawk",它是 ok
,它进入第二个 for 循环(带有 j
的循环)并输出 1,但是对于 "squeal" 它根本不会进入 j
循环。这是我目前的代码:
bool containsMeaning(string bigMeaning, string smallMeaning)
{
unsigned int smallCounter = 0;
unsigned int matchBeginning = 0;
unsigned int matchEnd = 0;
for (unsigned int i = 0; i < bigMeaning.size() - smallMeaning.size() + 1; i++)
{
cout << "i = " << i << endl;
smallCounter = 0;
if (bigMeaning[i] == smallMeaning[0])
{
matchBeginning = 0;
cout << "I'm inside the if " << i << endl;
for (unsigned int j = i; j < smallMeaning.size(); j++)
{
cout << "big char " << bigMeaning[j] << " small char " << smallMeaning[smallCounter] << endl;
if (bigMeaning[j] != smallMeaning[smallCounter])
{
cout << "I want to break free" << j << endl;
break;
}
else
{
matchEnd = j;
smallCounter++;
cout << "j = " << j << " smallcoutner = " << smallCounter << endl;
}
}
if (smallCounter == smallMeaning.size() &&
(matchBeginning == 0 || bigMeaning[matchBeginning - 1] == ' ' || bigMeaning[matchBeginning - 1] == ',')
&& (bigMeaning[matchEnd + 1] == '[=10=]' || bigMeaning[matchEnd + 1] == ' ' || bigMeaning[matchEnd + 1] == ','))
return true;
}
}
return false;
}
问题出在第二个for
循环中的条件上。您在那里所做的事情存在逻辑错误。您设置 j = i
的目的是拥有一个计数器,该计数器将遍历两个字符串,逐个字符地比较它们。但是,第一个 for 循环中的 i
遍历较大的字符串,没有理由让它小于较小字符串的大小,这就是您在 j < smallMeaning.size()
命令。
相反,您的 for
循环应该 for (int j = i; j < i + smallMeaning.size(); j++)
。