空间用未知长度的用户分隔动态输入

时间:2016-04-24 17:51:04

标签: c++ c++11 c++14

如何从用户将C ++中以空格分隔的输入存储到数组中?

最重要的部分是长度未知,输入应由用户在运行时输入

#include<iostream>
using namespace std;
int main() {
    int n=0;
    string names[3];
    int i = 0;
    while ( getline( cin, names[i]))
    {
        cout<<"i = "<<i<<"\n";
        cout<<names[i]<<"\n";
        i++;
        cout<<"i = "<<i<<"\n";
    }
    for(i=0;i<3;i++)
    {
        cout<<names[i];
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

我可以在您的代码中发现的第一个问题是,您提供了一个固定大小的数组string names[3];来存储未知数字的输入用户。这当然行不通。

要解决此问题,请使用可以使用“任意”编号std::strings的容器;

std::vector<std::string> names;

有了这个,你可以使用像

这样的东西
std::vector<std::string> names;
std::string name;
while(cin >> name) {
   names.push_back(name);
}

问题仍然存在是你如何结束这个循环。

有几种选择:

  1. 让用户使用CTRL-D or CTRL-Z之一(&lt; - 微妙链接)

  2. 要求他们输入特殊值,例如quitexit-1以结束输入

  3. 将其追踪到第二级以处理 ENTER 。当std::getline()读取空结果时,使用std::istringstream使用breakgetline()解析所有字词。
  4. 让我们分析一下:

    1. 这是一个糟糕的选择,因为它依赖于操作系统并要求用户执行相对复杂的操作

    2. 限制可能的输入,并且转义 <{1}},quit或类似的输入需要一种方法。

    3. ENTER 键的简单附加命中检索到的空输入可能是您可以为用户提供的最直观的输入。

    4. 作为遵循我在3中的提议的解决方案:

      exit