这段代码中的错误是什么

时间:2010-01-04 04:41:36

标签: c++

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

   string string1="arunachalam";

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

5 个答案:

答案 0 :(得分:8)

你的循环条件i < 0是罪魁祸首。循环立即退出,因为字符串的长度永远不会为负。替换为i >= 0

您还应该有i = string1.length() - 1,因为字符串索引从零开始。因此:

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

答案 1 :(得分:4)

问题出在int i=string1.length()语句中,因为索引是0,它应该是int i=string1.length() - 1此外,你的i < 0条件是错误的,我会让它自己解决。

答案 2 :(得分:2)

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

const string& reverseStr(const string& s);

会更有用。该定义可以使用std :: string中的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

答案 3 :(得分:1)

对不起,但应该是i> 0才能完成这项工作

答案 4 :(得分: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;
}