如何检查一个字符串的字母是否按给定顺序存在于另一个字符串中
How to check whether the letters of a string exist in the given order within another string?
我正在尝试制作一个程序来检查单词"nadia"
是否与字符串中的此序列一起存在。 如果您可以删除零个或多个字符以获取此单词,那么您应该打印"YES"
否则打印"NO"
。谁能帮我找到我缺少的测试用例?当我尝试提交它时,它说错误的输出。
这是我的代码:
#include <iostream>
#include <stdlib.h>
#include <string>
#include <vector>
using namespace std;
bool nadiaFound(string s){
int counter = 0;
char key[5] = { 'n', 'a', 'd', 'i', 'a' };
for (int i = 0; i < s.size(); i++){
if (s[i] == key[counter]){
counter++;
}
}
if (counter == 5){
return true;
}
else { return false; }
}
int main(){
int T;
cin >> T;
string *names = new string[T];
for (int i = 0; i < T; i++){
cin >> names[i];
}
bool *barr = new bool[T];
for (int i = 0; i < T; i++){
barr[i] = false;
}
for (int i = 0; i < T; i++){
if (nadiaFound(names[i])){
barr[i] = true;
}
else{
barr[i] = false;
}
}
for (int i = 0; i < T; i++){
if (barr[i]){
cout << "YES" << endl;
}
else {
cout << "NO" << endl;
}
}
return 0;
}
您可以在访问key[counter]
时访问越界内存,从而导致未定义的行为。一种可能的解决方法是:
for (int i = 0; i < s.size(); i++){
if (s[i] == key[counter]){
if(++counter == 5) break;
// ^^ ^^^^ ^^^^^
}
}
或将for
重写为for (int i = 0; i < s.size() && counter < 5; i++)
这也可以工作:
#include <iostream>
#include <string>
using namespace std;
int main(){
string names;
getline(cin,names);
cout << names << endl;
if (names.find("a", names.find("i", names.find("d", names.find("a", names.find("n", 0))))) != string::npos)
cout << "YES" << endl;
else
cout << "NO" << endl;
return 0;
}
函数 find 返回的结果指向字符串中搜索字符串开始的第一个位置或搜索的字符所在的位置(取决于变体)。
如果搜索失败,两个函数都会返回一个表示为 string::npos
的特殊值(此值在字符串的成员函数中用作 len(或 sublen)参数的值时,表示"直到字符串结束"。您可以使用它来检查您的干草堆是否包含所需的查找结果。
相关文章:
- C++-字符串是否包含一个带有简单循环的单词
- 将常量字符串添加到非常量字符串是否会给出常量字符串
- 检查字符串是否"null" C++
- 使用XOR查找O(n)-解决方案中的两个字符串是否为变位符
- 检查字符串是否为整数
- 使用 SET(C++) 检查两个给定字符串是否是字谜时出现运行时错误
- 如何检查字符串是否正确以将其转换为 int?
- 程序检查字符串是否只包含 1 和 0?
- 检查字符串是否是拉平德罗姆
- 尝试使用 indexOf 创建一个 if 语句来检查字符串是否包含字符.有一点麻烦
- 通过默认复制构造函数比较 C++ 字符串是否会影响性能,原因为何?
- gtest:检查字符串是否等于两个字符串之一
- 如何检查字符串是否包含所有这些:数字、字母和特殊字符
- 如何检查字符串是否以C++中的"ed"结尾;
- 字符串是否在其构造函数中复制数据
- 检查字符串是否是数字,然后将该数字转换为 int?
- 如何检查一个字符串是否包含多个其他字符串?
- 检查字符串是否仅包含字母
- 如何根据一个特定字母的出现来确定两个字符串是否相等?
- 查找字符串是否包含字符串向量的任何一个元素的最佳方法