给定T个测试用例,检查字符串中是否存在给定单词

时间:2019-01-04 15:18:02

标签: c++ string

我们给了一个单词“ hello”,对于给定数量的测试用例,我们必须检查该单词是否存在于给定的字符串中。 我的代码在下面,但是如果我使用测试用例“ t”,它将无法正常工作。否则它会正常工作。

#include <iostream>
#include <string>

using namespace std;
int i;
int t,flag=0;

int main()
{
    cin>>t;
    while(t--)
    {
        string a;
        getline(cin,a);
        for (i=0;i<a.length(); i++)
        {
            if (a.substr(i,5) == "hello")
            {
                flag=1;
            }
            else
                flag=0;
        }

        if(flag==1)
            cout<<"yes";
        else
            cout<<"not";
    }

    return 0;
} 

输入:

2

你好吗?

你好,你好吗?

输出:

不是

1 个答案:

答案 0 :(得分:0)

一种快速的解决方法是替换

if (a.substr(i,3) == "hello")

使用

if (a.find("hello") != string::npos)

更新:

我想您需要根据用空格(“”)分隔的单词进行匹配,因此我建议使用令牌,这是通过从原始代码中进行编辑的示例代码:

while(t--)
{
    string a;
    size_t pos = 0;
    string token;
    getline(cin,a);

    while ((pos = a.find(" ")) != string::npos)
    {
        token = a.substr(0, pos);
        if (token == "hello")
        {
            flag = 1;
            break;
        }
        else
            flag = 0;
        a.erase (0, pos+1);
    }

    if(flag==1)
        cout<<"yes";
    else
        cout<<"not";
}

另外,建议您在cin.clear()之后使用cin.ignore(100, '\n')cin>>t清除输入缓冲区,然后再读取新的字符串进行测试。