首页 > 解决方案 > 给定 T 测试用例检查给定单词是否存在于字符串中

问题描述

我们给出了一个词“你好”,我们必须检查这个词是否存在于给定的字符串中,对于给定数量的测试用例。我的代码在下面,但是如果我使用测试用例“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

你好吗?

你好,你好吗?

输出:

是的

不是

标签: c++string

解决方案


快速解决方法是更换

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()and cin.ignore(100, '\n')aftercin>>t清除输入缓冲区。


推荐阅读