c++ - 给定 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
你好吗?
你好,你好吗?
输出:
是的
不是
解决方案
快速解决方法是更换
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
清除输入缓冲区。
推荐阅读
- c++ - default_random_engine 种子使 C++ 将变量解释为函数
- c++ - 基于构造函数参数推导模板特化
- postgresql - 如何在 Airflow cfg 中存储 SQL 连接密码?
- rest - 通过 tweeter api 使用“@”和“#”发推文
- ios - ICS 文件未在 iPhone 中添加事件。在 Iphone 中使用 ics 添加事件的任何想法?
- r - 如何格式化 data.frame 和 ggplot 中的日期?
- c# - 在c#中使用字符串的数据类型列表创建元组
- python - 即使键存在,Python dict.get(k) 也不返回
- excel - 使用在运行时创建的 CommandButton 在 MultiPage UserForm 上创建更多页面
- unity3d - 如何通过脚本将 Kinematic 更改为 Dynamic?刚体2d