反转字符串程序中的分段错误

Segmentation fault in reversing string program

本文关键字:分段 错误 程序 字符串      更新时间:2023-10-16

>我正在尝试反转字符串。有人可以解释为什么这会给我分段错误吗?

#include <iostream>
#include <string>
using namespace std;
int main(){
string str,rstr;
int len=str.length(),i=0;
cin>>str;
while(str[i]!=''){
rstr[--len]=str[i++];
}
rstr[str.length()]='';
cout<<rstr;
return 0;
}

PS:需要在不使用库函数的情况下反转它。

如果你想按照你正在做的方式去做,出于练习的目的,请尝试此更改并从那里开始

#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]!=''){
rstr[--len]=str[i++];
}
rstr[str.length()]='';
cout<<rstr;
return 0;
}

或者只使用反向迭代器

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]!=''){
rstr[i++]=str[--len];
}
rstr[str.length()]='';
cout<<rstr;
return 0;
}