2010-01-04 33 views
0

在下面的代碼中我嘗試反轉字符串沒有編譯時錯誤但沒有顯示什麼錯誤?這段代碼中的錯誤

string string1="arunachalam"; 

    void reverseStr() 
    {   
     for(int i=string1.length();i<0;i--) 
     { 
      cout<<string1[i]; 
     } 
    } 

回答

4

問題是在int i=string1.length()聲明,因爲索引0依據應該是int i=string1.length() - 1此外,您i < 0條件是錯誤的,我會離開它去解決它自己。

+0

而爲 「i <0」 應爲 「我<= 0」。 – imaginaryboy 2010-01-04 04:46:16

+2

不,它應該是我> = 0 .. – Naveen 2010-01-04 04:47:00

+0

我也試過 – Arunachalam 2010-01-04 04:47:14

8

您的環路狀況i < 0是主要的罪魁禍首。循環立即退出,因爲字符串的長度永遠不會爲負值。換成i >= 0

由於字符串索引是從零開始的,因此您還應該有i = string1.length() - 1。因此:

for(int i = string1.length() - 1; i >= 0; i--) { 
    cout << string1[i]; 
} 
+0

所有這些混亂表明,一個乾淨的習慣用於向後循環。它存在(除了反向迭代器):'for(unsigned i = string1.size(); i - > 0;)'http://stackoverflow.com/questions/1642028/what-is-the-name-of -this-operator :) – UncleBens 2010-01-04 07:11:47

1

我很抱歉,但它應該是我> 0,使這項工作

+0

如果要顯示字符串的第一個字符,則不適用。 – UncleBens 2010-01-04 07:08:46

1

迄今爲止最清潔,關閉的情況的一個安全的停止條件,安全的解決方案爲這個正在使用反向迭代器 - 假設它是您正在使用的std :: string。如果它不依靠全局變量

string string1="arunachalam"; 
void reverseStr() 
{ 
    string::const_reverse_iterator cur; 
    // .rbegin() returns iterator to reverse-begin, i.e. the end ... 
    // operator++ on a reverse iterator does move it in the "right" 
    // (desired) direction. 
    for(cur=string1.rbegin(); cur!=string1.rend(); cur++) 
     cout << *cur; 
} 
2

一個功能更加有用。使用參數和返回值,如簽名:

const string& reverseStr(const string& s); 

會更有用。定義可以使用reverse_iterator從的std :: string從而:

const string& reverseStr(const string& s) 
{ 
    return string(s.rbegin(), s.rend()); 
} 

後跟實際使用:

string string1="arunachalam"; 

cout << reverseStr(string1); // XXX: add an endl, if needed