反转字符串程序中的段错误
Segmentation fault in reversing string program
我正在尝试反转字符串。有人能解释一下为什么这会给我分段错误吗?
#include <iostream>
#include <string>
using namespace std;
int main(){
string str,rstr;
int len=str.length(),i=0;
cin>>str;
while(str[i]!='[=10=]'){
rstr[--len]=str[i++];
}
rstr[str.length()]='[=10=]';
cout<<rstr;
return 0;
}
P.S.: 需要在不使用库函数的情况下逆向
或者只使用反向迭代器
std::string s = "Hello";
std::string r(s.rbegin(), s.rend());
str
只不过是这里声明的字符串:
int len=str.length(),i=0;
所以你不能str.length()
做类似的事情:
#include <iostream>
#include <string>
using namespace std;
int main(){
string str,rstr;
int len,i=0;
cin>>str;
len = str.length();
while(str[i]!='[=11=]'){
rstr[i++]=str[--len];
}
rstr[str.length()]='[=11=]';
cout<<rstr;
return 0;
}
如果您想按照自己的方式进行练习,请尝试进行此更改并从那里开始
#include <iostream>
#include <string>
using namespace std;
int main(){
string str,rstr;
cin>>str; // --- Moved this line up
rstr = str; // --- Added this line
int len=str.length(),i=0;
while(str[i]!='[=10=]'){
rstr[--len]=str[i++];
}
rstr[str.length()]='[=10=]';
cout<<rstr;
return 0;
}
我正在尝试反转字符串。有人能解释一下为什么这会给我分段错误吗?
#include <iostream>
#include <string>
using namespace std;
int main(){
string str,rstr;
int len=str.length(),i=0;
cin>>str;
while(str[i]!='[=10=]'){
rstr[--len]=str[i++];
}
rstr[str.length()]='[=10=]';
cout<<rstr;
return 0;
}
P.S.: 需要在不使用库函数的情况下逆向
或者只使用反向迭代器
std::string s = "Hello";
std::string r(s.rbegin(), s.rend());
str
只不过是这里声明的字符串:
int len=str.length(),i=0;
所以你不能str.length()
做类似的事情:
#include <iostream>
#include <string>
using namespace std;
int main(){
string str,rstr;
int len,i=0;
cin>>str;
len = str.length();
while(str[i]!='[=11=]'){
rstr[i++]=str[--len];
}
rstr[str.length()]='[=11=]';
cout<<rstr;
return 0;
}
如果您想按照自己的方式进行练习,请尝试进行此更改并从那里开始
#include <iostream>
#include <string>
using namespace std;
int main(){
string str,rstr;
cin>>str; // --- Moved this line up
rstr = str; // --- Added this line
int len=str.length(),i=0;
while(str[i]!='[=10=]'){
rstr[--len]=str[i++];
}
rstr[str.length()]='[=10=]';
cout<<rstr;
return 0;
}