我可以将单个字符分配给c ++中的字符串吗?

时间:2016-10-26 16:10:10

标签: c++

我正在尝试编写一个程序来反转字符串。我使用了以下代码,但不幸的是它没有用。我有点困惑为什么会这样。

这是我的代码:

#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的反向字符串是。

3 个答案:

答案 0 :(得分:7)

这个问题并不是你认为的那样。 OutputString 为空,任何对它的索引都将超出界限并导致未定义的行为

您可以改为执行

之类的操作
OutputString += InputString[i]; 

将字符附加到字符串。

此外,循环条件i >=0, j<length将无法像你想象的那样工作。您正在使用逗号表达式,因此在评估i >= 0j<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;   
}

Live Demo

答案 2 :(得分:0)

或者您只是这样做:

string OutputString(InputString.rbegin(), InputString.rend());
cout << "The reverse string of " << InputString << " is "
         << OutputString << ".\n";