2017-07-28 59 views
-4

我想反转一个字符串。有人可以解释为什么这给我分段错误吗?反转字符串程序中的分段错误

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

必须在不使用库函数的情况下进行反转。

+0

rstr是空的。你不能在不存在的元素上使用'[]'。 – NathanOliver

+0

rstr [ - len]是一个无效的位置。预先为rstr分配存储空间 –

+0

改为使用'std :: reverse()'。 –

回答

1

我想你要这样做,为了实践的目的,尝试这种改变并从那里开始

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

或者只是使用反向迭代

std::string s = "Hello"; 
std::string r(s.rbegin(), s.rend()); 
+0

用于反转字符串的其他方法的链接。似乎很多选择,但所有的道路导致罗马https://stackoverflow.com/questions/7199241/reversing-a-string-in-c-using-a-reverse-iterator?rq=1 – systemcpro

0

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