如果字符串包含“#nadia”,则此代码应返回“是”。没有其他。但是当我提交它时说错误的答案虽然它在样本测试中有所影响。有谁知道我错过了什么?
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
int t;
bool flag = false;
bool flag2 = false;
bool flag3 = false;
bool flag4 = false;
int count = 0;
vector<string>v;
cin >> t;
string x;
for (int i = 0; i < t; i++)
{
cin >> x;
v.push_back(x);
}
for (int i = 0; i < v.size(); i++)
{
x = v[i];
for (int i = 0; i < x.length(); i++)
{
if (x.at(i) == 'n')
{
flag = true;
for (int i = 0; i < x.length(); i++)
{
if (x.at(i) == 'a')
{
++count;
flag2 = true;
for (int i = 0; i < x.length(); i++)
{
if (x.at(i) == 'd')
{
flag3 = true;
for (int i = 0; i < x.length(); i++)
{
if (x.at(i) == 'i')
{
flag4 = true;
}
}
}
}
}
}
}
}
if ((flag) && (flag2) && (flag3) && (flag4) && (count >= 2))
{
cout << "YES" << endl;
}
else
{
cout << "NO" << endl;
}
count = 0;
flag = false;
flag2 = false;
flag3 = false;
flag4 = false;
}
system("pause");
return 0;
}
示例输入:
3
anhaldillooa
nnaaddiiaa
nxzdiao
示例输出:
YES
YES
NO
答案 0 :(得分:1)
你几乎要建立一个状态机来寻找子串。
std::string str ("There are two needles in this haystack with needles.");
std::string str2 ("needle");
// different member versions of find in the same order as above:
std::size_t found = str.find(str2);
if (found!=std::string::npos)
std::cout << "first 'needle' found at: " << found << '\n';
答案 1 :(得分:0)
如果你出于某种原因拒绝使用string :: find,那么至少要做一个聪明的男孩;)。 另外,检查输出格式。也许你不需要换行新答案?
以下是一些代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
int t = 0;
int pos = 0;
const char c[5] = {'n', 'a', 'd', 'i', 'a'};
vector<string> v;
string x;
cin >> t;
for (int i = 0; i < t; i++)
{
cin >> x;
v.push_back(x);
}
for (int i = 0; i < v.size(); i++)
{
x = v[i];
for(int j = 0; j < x.length() && pos < 5; j++)
if(x[j] == c[pos]) pos++;
if(pos == 5) cout<<"YES ";
else cout<<"NO ";
pos = 0;
}
return 0;
}
答案 2 :(得分:0)
仅使用for循环代码的替代方法:
bool contains(string input, string target){
int target_index = 0;
for(int i = 0; i < input.size(); i++){
target_index = input.at(i) == target[target_index].at(i) ? target_index + 1 : 0;
if(target_character_index + 1 == target.size()) return true;
}
return false;
}
int main()
{
int size = 0;
cin>>size;
string target = "nadia";
while(size-- > 0){
string input = "";
cin>>input;
cout>>contains(input, target) ? "YES" : "NO";
}
return 0;
}
答案 3 :(得分:0)
您的所有循环都以 i = 0
开头。
这意味着您只是在字符串中的任何位置单独查找字符 n
、a
、d
、i
和 a
,与其他所需字符的位置无关。
您根本没有进行子字符串搜索。这只是错误的算法。
您还只测试了所有在一行中找到的“nadia”输入;如果你测试过例如“戴安娜”也是如此,你会发现毫无疑问是由在线测试程序触发的假阳性结果。