cod*_*ant 2 c++ arrays reverse loops
我试图使用以下代码反转字符串,但得到一个永无止境的小方块输出.(每行1个)
码:
#include <iostream>
#include <math.h>
#include <iomanip>
#include <sstream>
int main() {
// Reversing A String
cout<<"welcome to string reverser"<<endl;
int sizeOfString;
cout<<"please input size of string"<<endl;
cin>>sizeOfString;
char charray3[sizeOfString];
cin>>charray3;
for(unsigned int i=sizeOfString-1; i>=0; i--){
cout<<charray3[i]<<endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的尝试中,我将sizeOfString设置为3并将charray3设置为'abc'.
输出:
我究竟做错了什么?
\0字符终止.std::string.i>=0总是真的,因为它i是无符号的(在迭代i后你的无符号可以保存的bigest值0).不要问字符串的大小.除了没有必要之外,它使您的程序非标准,因为可变长度数组构造char charray3[sizeOfString],是编译器扩展.
用std::getline相反,它会读取分配尽可能多的字符是必要的.之后,以与上面相同的方式反向打印字符串,或者根据需要将字符串反转.小心无符号减法!但是,您的编译器应该警告您.
注意:如果您想知道为什么您的程序不起作用,'\n'读取后会有一个剩余的坐在缓冲区中int.由于该缓冲字符,一旦调用,程序将返回一个空字符串cin>>charray3.