使用for循环C++反转字符串

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'.

输出:

盒子输出

我究竟做错了什么?

Pix*_*ist 5

  1. 标准C++不允许您将变量用作数组的大小.
  2. 字符串由\0字符终止.
  3. 不要使用字符数组std::string.
  4. 你的循环永远不会终止,因为i>=0总是真的,因为它i是无符号的(在迭代i后你的无符号可以保存的bigest值0).


das*_*ght 5

不要问字符串的大小.除了没有必要之外,它使您的程序非标准,因为可变长度数组构造char charray3[sizeOfString],是编译器扩展.

std::getline相反,它会读取分配尽可能多的字符是必要的.之后,以与上面相同的方式反向打印字符串,或者根据需要将字符串反转.小心无符号减法!但是,您的编译器应该警告您.

注意:如果您想知道为什么您的程序不起作用,'\n'读取后会有一个剩余的坐在缓冲区中int.由于该缓冲字符,一旦调用,程序将返回一个空字符串cin>>charray3.