C++ 字符串返回为“

C++ string returning as "

我正在尝试编写一个反转字符串的函数。我已经弄清楚了大部分代码,当我将字符串打印到 std::cout 时,它显示了我需要的内容。但是,当我测试代码时,结果是我从函数中得到了 " 。这是我的代码:

#include <iostream>
#include <string>
using namespace std; 
string result;
string reverseString (string str)
{
  for(int i = str.length(); i >= -1; i--) {
    result+= str[i];
  }
  cout << result;
  return result;
}

在这个 for 循环中,在第一次迭代中:

  for(int i = str.length(); i >= -1; i--) {
    result+= str[i];
  }

终止零字符 '[=15=]' 被写入对象 result 的第一个位置,因为表达式 str[i] 在这种情况下等同于表达式 str[str.length()].

因此,result 字符串输出为空字符串。

此外,您正在尝试使用负索引 -1 访问源字符串,这会导致未定义的行为。

而不是这个 for 循环,你可以只写:

result.assign( str.rbegin(), str.rend() );

如果您想使用 for 循环完成任务,则循环可以如下所示:

result.clear();
result.reserve( str.length() ); 

for ( auto i = str.length(); i != 0; ) {
    result += str[--i];
}

注意,在函数中使用全局变量result是个坏主意。该函数可能如下所示:

std::string reverseString( const std::string &str )
{
    return { str.rbegin(), str.rend() };
}