这个反向字符串代码是否正确?

时间:2014-10-07 01:41:41

标签: c++

当我在我的IDE上运行它时,此代码适用于我,但它在具有练习的网站上不起作用。我遇到了分段错误。那么这段代码是否正确?我犯了错误吗?

#include <iostream>
#include <string>
using namespace std;

string FirstReverse(string str) { 
  for (int i = 0, back = str.size()-1; i != back; ++i, --back)
  {
    char c = str[back];
    str[back] = str[i];
    str[i] = c;
  }
  return str; 
}

int main() {
  cout << FirstReverse("hello");
  return 0;
}

另外,最好的方法是什么?

3 个答案:

答案 0 :(得分:3)

您的索引只需要达到一半的长度,这样我们就可以确保一对之间的交换只发生一次:

for (int i = 0; i < str.size() / 2 ; i ++)
{
    char c = str[str.size() - 1 - i];
    str[str.size() - 1 - i] = str[i];
    str[i] = c;

}

答案 1 :(得分:0)

如果将循环条件更改为“i&lt; = back”,则不会导致分段错误。这是因为当size-1是偶数时,i&amp;回来永远不会平等。因此循环将继续运行而不会破坏&amp;尝试访问字符串外的字符串成员。

答案 2 :(得分:0)

只需将您的条件从!=更改为<=即可解决。