2017-07-28 41 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; 
}