由于来自bool函数C ++的StackOverflowException,进程终止

时间:2013-04-05 12:16:50

标签: c++ stack-overflow

我正在尝试创建一个bool函数,它允许输入一个字符串,并在该字符串的输入中搜索子字符串的输入。 bool函数应该递归搜索匹配,如果字符串内部匹配则返回true。例如:'word'作为字符串输入,然后'或'是我在字符串中寻找的子字符串。然后该函数应该返回true,因为'或'在'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;

 }

1 个答案:

答案 0 :(得分:0)

您的擦除电话不会删除任何字符。擦除的定义是:

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

因此,您要删除1字符,而不是0个字符。

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

if(is_found == true)

另外,你试图给is_found分配值true并测试该值(在这种情况下总是为真。

此外,您还有:

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

其中t_len不正确(关闭一个),因此字符串比较不起作用。

从根本上说,您似乎并未理解erasesubstr的定义,这对于使其正常运行至关重要。