C++反转字符串

pbgvytdp  于 11个月前  发布在  其他
关注(0)|答案(5)|浏览(78)

我试图在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;

}

字符串

9o685dep

9o685dep1#

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

bfhwhh0e

bfhwhh0e2#

如果你只是想反转一个字符串,你应该使用std::reverse,就像泰勒刘易斯描述的那样,这是最好的选择。
如果你想学习C++,那么编写自己的版本是一个很好的练习。
线

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

字符串
表示“创建一个新的int,名为i,并将其初始设置为size。然后,当size为零时,执行以下操作,然后递减size“。
这有三个问题:
1.除非输入了一个字符串,否则Size不为零
1.由于您从未使用过i,因此声明它是没有意义的
1.在循环内部,您使用j,每次都设置为零。
可以通过将for循环的中间部分更改为size >= 0来修复第一个问题(但是要小心-如果您稍后将其更改为sizeunsigned类型,因为它没有意义为负数,则该代码将无法工作;通常最好是向上递增)。你可以通过在循环语句中的任何地方使用i来修复第二个,不改变size。你可以通过在循环体中使用i来修复第三个问题,而不是在循环中声明一个新变量。

smdnsysy

smdnsysy3#

我注意到你使用了std::string,所以我使用了std函数swap和string。取决于你是否认为这是一个“库”。有几种定义的“reverse”。你可以反转字符串中的单词顺序,或者像我写的那样纯char到char反转。reverse也可能意味着改变字符大小写等.但这只是交换第一个和最后一个。然后交换第二个和第二个到最后一个,然后交换第三个和第三个到最后一个,等等.
从你的代码中可以看出,你只需要循环字符串长度的一半。交换是从第i和第i到last。所以last是numCharacters - 1,因此第i到last将是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;
}

字符串
输出量:
反转字符串
格尼什河

yx2lnoni

yx2lnoni4#

对有问题的代码段进行更改,它可以工作。

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

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

        }

字符串

e0bqpujr

e0bqpujr5#

我在做同样的练习时遇到了这个线程:

std::string s = "hello";
std::string reversed(s.size(), ' ');
for (int idx = s.length(); idx >= 0; idx--)
{
    reversed[idx] = s[idx];
}

字符串

相关问题