我遇到了一个问题,一个程序在一个给定的字符串中查找所有的子字符串。我试图使变量“found”,它将包含一个位置,一个先前找到的子字符串,然后开始搜索的位置。下面是我的代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
string str1;
cin >> str >> str1;
int i = 0;
int found = -1;
while(found < str1.size()){
found = str1.find(str, found + 1);
cout<<str1.find(str, found)<<endl;
i++;
}
}
用于以下输入:“abaabb”它什么都不打印。你能帮忙吗?
2条答案
按热度按时间kx5bkwkv1#
所以先讲一点理论:
substr(a,b)
-〉返回从位置a到位置B剪切的字符串find(a)
-〉返回找到的字符或字符集“a”的位置。如果未找到,则返回-1。让我们检查一下您的代码:
现在,让我们看看为什么您的代码在控制台上没有显示任何内容:
str 1.查找(“ab);- 〉函数find在字符串str 1中搜索“ab”。你不需要添加它要搜索的位置。另外,你的while循环依赖于found〈str1.size(),而与你的迭代器无关,这意味着你的循环将永远继续下去。每当这种情况发生时,大多数IDE都会崩溃,你的程序什么也不给你。
修复:
zpf6vheq2#
另一种可能的解决方案是:
starts_with
)。Demo(https://godbolt.org/z/nEnrh5Ehb)