C ++反转字符串

Dan*_*min 0 c++ string

我试图在revStr.at(j)= str.at(size);下面的c代码行中反转一个字符串;

不会更改revStr中的任何元素。

还有另一种不用任何库就可以做到的方法。

#include <iostream>
#include<sstream>
#include <iterator>
using namespace std;


int main() {

    ostringstream d;

    long long c = 123456789;
    d << c;
    //cout << c << endl;
    string str = d.str();
    //cout << str.at(0) << endl;
    int size = str.size() - 1;
    //cout << size << endl;
    ostringstream e;
    e << str;
    string revStr = e.str();

for (int i = size; size==0; size--) {
    //cout << str.at(size);

        int j = 0;
        revStr.at(j) = str.at(size);
        j++;

} // End For

cout << "Original String is  :" << str << endl;
cout << "Reversed String is  :" << revStr << endl;

}
Run Code Online (Sandbox Code Playgroud)

Tyl*_*wis 8

使用std::reverse

#include <string>
#include <algorithm>
#include <iostream>

int main()
{
    std::string test{"Hello"};
    std::cout << "Original string: " << test << std::endl;
    std::reverse(test.begin(), test.end());
    std::cout << "Reversed string: " << test << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Original string: Hello
Reversed string: olleH
Run Code Online (Sandbox Code Playgroud)


Dan*_*l H 5

如果只想反转字符串,则应使用std::reverse,如Tyler Lewis所述。这是最好的选择。


如果您想学习C ++,那么编写自己的版本是一个好习惯。

线

for (int i = size; size==0; size--)
Run Code Online (Sandbox Code Playgroud)

意思是“创建一个新的int名为i并将其设置为size开始。然后,当size为零时,执行以下操作,然后递减size”。

这有三个问题:

  1. 大小不为零,除非您输入一个单字符字符串
  2. 由于您从未使用过i,因此没有必要声明它
  3. 在循环内部使用j,每次设置为零。

您可以通过将for循环的中间部分更改为来解决第一个问题size >= 0(但请注意,如果以后再将其更改size为一种unsigned类型,因为将它设为负数没有意义,则该代码将无法正常工作;通常最好增加增量)。您可以通过i在loop语句中的任何地方使用第二个来固定第二个,而不用更改size。您可以通过i在循环主体中使用而不在循环内部声明新变量来修复第三个。