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() };
}
我正在尝试编写一个反转字符串的函数。我已经弄清楚了大部分代码,当我将字符串打印到 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() };
}