我正在尝试编写一个程序来反转字符串。我使用了以下代码,但不幸的是它没有用。我有点困惑为什么会这样。
这是我的代码:
#include <string>
#include <iostream>
using namespace std;
int main()
{
string InputString = "Hello";
string OutputString;
int length;
length = InputString.length();
for (int i=length-1, j=0; i >=0, j<length; i--, j++)
OutputString[j] = InputString[i];
cout << "The reverse string of " << InputString << " is "
<< OutputString << ".\n";
return 0;
}
我的输出是: Hello的反向字符串是。
答案 0 :(得分:7)
这个问题并不是你认为的那样。 OutputString
为空,任何对它的索引都将超出界限并导致未定义的行为。
您可以改为执行
之类的操作OutputString += InputString[i];
将字符附加到字符串。
此外,循环条件i >=0, j<length
将无法像你想象的那样工作。您正在使用逗号表达式,因此在评估i >= 0
和j<length
时,只会使用j<length
的结果。您可能希望在那里使用逻辑和运算符:i >=0 && j<length
。
答案 1 :(得分:0)
我更喜欢像这样反转字符串:
#include <string>
#include <iostream>
int main(int argc,char** argv){
std::string hello = "hello";
for(std::size_t i=0;i < hello.length()/2; ++i)
{
std::swap(hello[i],hello[hello.length()-i-1]);
}
std::cout<<hello<<std::endl;
return 0;
}
答案 2 :(得分:0)
或者您只是这样做:
string OutputString(InputString.rbegin(), InputString.rend());
cout << "The reverse string of " << InputString << " is "
<< OutputString << ".\n";