C ++反转字符串

时间:2017-09-15 22:41:29

标签: c++ string

我试图将字符串转换为我的c ++代码行,低于revStr.at(j)= str.at(size);

不会更改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;

}

4 个答案:

答案 0 :(得分:5)

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

如果您想学习C ++,那么编写自己的版本就是一种很好的做法。

该行

for (int i = size; size==0; size--)

表示“创建一个名为int的新i,并最初将其设置为size。然后,当size为零时,执行以下操作,然后递减size“。

这有三个问题:

  1. 除非您输入单字符字符串
  2. ,否则大小不为零
  3. 既然你从不使用i,那么宣布它是没有意义的
  4. 在循环内部使用j,每次都设置为零。
  5. 您可以通过将for循环的中间部分更改为size >= 0来修复第一个问题(但要小心 - 如果您稍后更改它,以便sizeunsigned }类型,因为它没有意义,它是负面的,代码将不起作用;通常更好的是增加上升而不是)。您可以在循环语句中的任何位置使用i来修复第二个,而不是更改size。您可以在循环体中使用i来修复第三个,而不是在循环内声明一个新变量。

答案 1 :(得分:3)

使用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;
}

输出:

Original string: Hello
Reversed string: olleH

答案 2 :(得分:1)

我注意到你使用了std :: string所以我使用了std函数swap和string。取决于您是否将其视为&#39;库。 “反向”有几种定义。您可以将字符串中的单词顺序反转,或者像我写的那样将纯字符反转为字符反转。逆转也可能意味着改变角色情况......等等,这只是交换的第一个和最后一个。然后将第二个和第二个交换到最后一个,然后交换第三个和第三个到最后一个等等......

您的代码中的一些要点。你只需要循环一半的字符串长度。交换是从第i个和第i个到最后的。所以最后一个是numCharacters - 1,因此最后的第i个将是Last - i或numCharacters - 1 - i。我相信这是你使用farLeft(i)和farRight(j)索引的意图。

#include <iostream>

void reverseStringInPlace(std::string &stringToReverse)
{
    int numCharacters = stringToReverse.length();
    for (int i=0; i<numCharacters/2; i++)
    { std::swap(stringToReverse[i], stringToReverse[numCharacters-i-1]); }
}

int main()
{
   std::string stringToReverse = "reversing a string";
   std::cout << stringToReverse << std::endl;
   reverseStringInPlace(stringToReverse);
   std::cout << stringToReverse << std::endl;
   return 0;
}

输出:

  

倒转字符串
  gnirts a gnisrever

答案 3 :(得分:0)

对相关代码所做的更改,它有效。

 for (unsigned int i = size; size >= 0; size--) {

            revStr[j] = str[size];
            j++;

        }