我们给了一个单词“ 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
你好吗?
你好,你好吗?
输出:
是
不是
答案 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
清除输入缓冲区,然后再读取新的字符串进行测试。