我试图在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;
}
字符串
5条答案
按热度按时间9o685dep1#
使用std::reverse:
字符串
输出量:
型
bfhwhh0e2#
如果你只是想反转一个字符串,你应该使用
std::reverse
,就像泰勒刘易斯描述的那样,这是最好的选择。如果你想学习C++,那么编写自己的版本是一个很好的练习。
线
字符串
表示“创建一个新的
int
,名为i
,并将其初始设置为size
。然后,当size
为零时,执行以下操作,然后递减size
“。这有三个问题:
1.除非输入了一个字符串,否则Size不为零
1.由于您从未使用过
i
,因此声明它是没有意义的1.在循环内部,您使用
j
,每次都设置为零。可以通过将
for
循环的中间部分更改为size >= 0
来修复第一个问题(但是要小心-如果您稍后将其更改为size
是unsigned
类型,因为它没有意义为负数,则该代码将无法工作;通常最好是向上递增)。你可以通过在循环语句中的任何地方使用i
来修复第二个,不改变size
。你可以通过在循环体中使用i
来修复第三个问题,而不是在循环中声明一个新变量。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)索引的目的。
字符串
输出量:
反转字符串
格尼什河
yx2lnoni4#
对有问题的代码段进行更改,它可以工作。
字符串
e0bqpujr5#
我在做同样的练习时遇到了这个线程:
字符串