C++を使用する関数から変更された文字列をmain()に返すときにセグメント化エラーが発生します。コードで何が間違っているのか分かりません。目的は文字列 's1'から 'rem1'という文字列を再帰的に削除することです。参考までに私は自分のコードを投稿に含めています。C++の再帰関数からmainへの文字列を返すときにセグメンテーションフォールトが発生する理由
#include <iostream>
#include <string>
using namespace std;
string recursiveRemove(string s, string rem);
int main()
{
string s1 = "eat tdydyfygyhdy";
string rem1 = "dy";
//recursively remove the rem string from s
s1 = recursiveRemove(s1, rem1);
cout<<s1<<endl;
return 0;
}
string recursiveRemove(string s, string rem){
cout<<"In recursive function s is now = "<<s<<endl;
cout<<"rem = "<<rem<<endl;
if(s.length() == 0){
//cout<<s<<endl;
//return;
return s;
}
if(s == rem){
//cout<<""<<endl;
//return;
return "";
}
if(s.length() < rem.length()){
//cout<<s<<endl;
//return;
return s;
}
else{
cout<<"Entered into Else section"<<endl;
int i = 0, j = 0;
int startInd;
while(i<s.length() && s[i] != rem[j]) {
i++;
}
cout<<"i = "<<i<<endl;
if(i == s.length()){//reached the end of the string
cout<<"i = "<<i<<" s.length() = "<<s.length()<<", s="<<s<<endl;
//cout<<s<<endl;
//return;
return s;//temp;
}
else{//match found for first character
startInd = i;
while(i<s.length() && j<rem.length()){
cout<<"Inside while, s[i] = "<<s[i]<<", rem[j] = "<<rem[j]<<endl;
if(s[i] != rem[j]){
//cout<<"inside if s[i]="<<s[i]<<", rem[j]="
//cout<<s<<endl;
//return;
return s;
}
i++;
j++;
cout<<"after increase i= "<<i<<" j="<<j<<endl;
}
int noOfCharsMatched = i - startInd;
s.erase(startInd, noOfCharsMatched);
s = recursiveRemove(s, rem);
}
}
}
どのように深呼吸は深くなりますか?スタックがオーバーフローしていますか(a.k.a. StackOverflow)? –
テストのために私は3回の再帰まで使用しました。しかし、最初の再帰でさえ、私にセグメンテーション違反が与えられます。 – Ishrat