函数不进入 for 循环

Function doesn't go into for loop

本文关键字:for 循环 函数      更新时间:2023-10-16

我正在尝试编写我自己的函数,它获得2个字符串,并说明如果第一个字符串包含第二个字符串作为单词(意思是单词被"或"包围)。当我测试字符串"squawk,squawk"answers"squawke"时,它是ok,它进入第二个for循环(带有j的循环)并输出1,但对于"squaw",它根本不会进入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] == '' || bigMeaning[matchEnd + 1] == ' ' || bigMeaning[matchEnd + 1] == ','))
            return true;
    }
}
return false;

}

问题在于第二个for循环中的条件。你在那里做的事情有一个逻辑错误。您设置j = i的目的是有一个计数器,它将在两个字符串上迭代,逐字符比较它们。但是,第一个for循环中的i会迭代较大的字符串,并且没有理由小于较小字符串的大小,这就是您在j < smallMeaning.size()命令中的第二个for循环所假设的大小。

相反,您的for循环应该是for (int j = i; j < i + smallMeaning.size(); j++)