这个反向字符串代码正确吗

Is this reverse string code correct?

本文关键字:代码 字符串      更新时间:2023-10-16

当我在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;
}

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

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

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;

}

如果将循环条件更改为"i<=back",则不会导致分段错误。这是因为当尺寸-1是偶数时,i&背部永远不会变得平等。因此循环将继续进行而不中断&尝试访问字符串之外的字符串成员。

只需将条件从!=更改为<=,它就会得到解决。