代码之家  ›  专栏  ›  技术社区  ›  Arunachalam

这段代码中的错误是什么

c++
  •  0
  • Arunachalam  · 技术社区  · 16 年前

    在下面的代码中,我试图反转字符串,没有编译时错误,但是没有显示任何内容。怎么了?

       string string1="arunachalam";
    
       void reverseStr()
       {        
           for(int i=string1.length();i<0;i--)
           {
              cout<<string1[i];
           }
       }
    
    5 回复  |  直到 16 年前
        1
  •  4
  •   Naveen    16 年前

    问题出在 int i=string1.length() 语句,因为索引是基于0的,所以应该 int i=string1.length() - 1 还有,你的 i < 0 情况不对,我会让你自己解决的。

        2
  •  8
  •   jason    16 年前

    i < 0 是罪魁祸首。循环立即退出,因为字符串的长度从不为负。取代 i >= 0 .

    i = string1.length() - 1 因为字符串索引是从零开始的。因此:

    for(int i = string1.length() - 1; i >= 0; i--) {
        cout << string1[i];
    }
    
        3
  •  2
  •   vapace    16 年前

    如果函数确实如此,则它更有用 依赖于全局变量。使用参数和返回值,如签名:

    const string& reverseStr(const string& s);
    

    会更有用。定义可以使用 reverse_iterator

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

    其次是实际使用:

    string string1="arunachalam";
    
    cout << reverseStr(string1); // XXX: add an endl, if needed
    
        4
  •  1
  •   allan    16 年前

    对不起,应该是我>0来实现此功能

        5
  •  1
  •   emvee    16 年前

    到目前为止,最干净、安全且停止条件安全的解决方案是使用反向迭代器——假设您使用的是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;
    }