C++ Cin 输入到数组

标签 c++ arrays cin

我是 c++ 的初学者,我想将一个字符串作为一个字符一个字符地输入到一个数组中,这样我就可以实现一个反向函数。但是与 C 不同的是,当输入被击中时,'\n' 没有被插入在流中..如何停止输入数据?

我的代码是:

#include<iostream>
#include<array>
#define SIZE 100
using namespace std;

char *reverse(char *s)
{
    array<char, SIZE>b;
    int c=0;
    for(int i =(SIZE-1);i>=0;i--){
        b[i] = s[c];
        c++;
    }

    return s;
} 

int main()
{
    cout<<"Please insert a string"<<endl;
    char a[SIZE];
    int i=0;
    do{
        cin>>a[i];
        i++;
    }while(a[i-1]!= '\0');

    reverse(a);

    return 0;
}

最佳答案

当您逐个字符读取时,它实际上读取的是字符,换行符被视为空白字符

此外,数组永远不会作为 C 风格的字符串终止,这不是读取字符的工作方式。这意味着你的循环条件是错误的。

首先,我建议您开始使用 std::string 作为您的字符串。您仍然可以逐个字符地阅读。要继续,您需要实际检查您阅读了哪些字符,并在阅读换行符后结束阅读。

最后,您的reverse 函数不起作用。首先循环本身是错误的,其次你返回了指向原始字符串的指针,而不是“反转”数组。


为了帮助您阅读,可以这样做

std::string str;
while (true)
{
    char ch;
    std::cin >> ch;
    if (ch == '\n')
    {
        break;  // End loop
    }

    str += ch;  // Append character to string
}

请注意,真正需要的并不多,如 the answer by Stack Danny 所示。 .即使是我上面的代码也可以简化,同时仍然一次读取一个字符。

关于C++ Cin 输入到数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39898918/

相关文章:

arrays - 如何识别整数数组中的周期序列

c++ - string.length() 在第一个单词后停止

c++ - 使用 boost::mpl 的类型列表的排列

c++ - 如何在没有 MSYS 的情况下将 gtkmm 与 MinGW (g++) 一起使用?

c++ - 为什么这个无锁堆栈类中的 'deleting' 节点会导致竞争条件?

php - 使用日期和总和旋转 mysql 结果

javascript - 为什么位置移动后我得到一个空数组?

c++ - 检查 cin 输入流产生一个整数

让 cin 读取返回字符的 C++

c++ - 如何编写具有异步事件触发的 C++ COM 对象(如 VB6 的 Timer 对象)?