0

我正在尝试制作一个 bool 函数,该函数将允许在该字符串的输入中搜索字符串的输入和子字符串的输入。bool 函数应该递归搜索匹配,如果字符串中有匹配则返回 true。例如: 'word' 作为字符串输入,然后 'or' 是我在字符串中查找的子字符串。然后该函数应该返回 true,因为 'or' 在 'word' 中。当我运行代码时,它会在命令行上显示“由于 StackOverFlowException 导致进程终止”,我对这个错误的含义以及它与我的代码的关系感到困惑。

#include <iostream>
#include <string>

using namespace std;

bool find(string s, string t)
{

if(s.length() <= 1){
    return false;
}
int t_len = t.length() - 1;
string se = s.substr(0, t_len);

if(se == t){
    return true;
}
else
s.erase(0,0);
return find(s, t);
}
int main()
{

string s;
string t;
cout << "Enter string s: " << endl;
cin >> s;
cout << "Enter string t: " << endl;
cin >> t;

bool is_found = find(s, t);
if(is_found = true)
{
    cout << "Found: " << t << " in " << s << endl;
}

system("pause");
return 0;

 }
4

1 回答 1

0

您对擦除的调用不会删除任何字符。擦除的定义是:

erase( size_type index = 0, size_type count = npos );

所以你想擦除1字符,而不是0字符。

此外,您最后的测试应为:

if(is_found == true)

否则,您将尝试将 is_found 值分配为 true 并测试该值(在这种情况下始终为 true。

此外,您还有:

string se = s.substr(0, t_len);

wheret_len不正确(减一),因此字符串比较将不起作用。

从根本上说,您似乎没有理解eraseor的定义substr,这对于使其正常工作至关重要。

于 2013-04-05T12:19:42.267 回答