【问题标题】:store every line of input in an array with getline c++使用getline c ++将每一行输入存储在一个数组中
【发布时间】:2014-04-04 08:51:46
【问题描述】:

我正在使用 getline 获取输入,并且我想将每一行输入存储到一个数组中,以便我可以调用特定的数组内容以进行进一步处理。有任何想法吗?提前致谢

string line;

while (true) {

    getline(cin, line);

    if (line.empty()) {
        break;
    }
    // code

}

编辑/添加

有谁知道为什么我不能在 while 循环之前使用cin?例如,当我把 cin >> var1; 在循环之前它根本不会进入循环!

回答我自己

我发现this 解决了!

【问题讨论】:

  • std::vector<std::string> 是你的朋友。
  • 顺便问一下,您真的要在第一个空行上完全停止处理输入吗?或者只是忽略那条线?另外,我建议将getline 移动到循环条件中,以便您阅读并立即检查它是否成功:while(std::getline(std::cine, line)) { ... }
  • 是的,只要用户给出,我就想得到输入,然后用空行向我的程序发出信号,表示没有更多的输入,除了提示之外,我想不出更好的方法用户在输入最后一次输入时按两次回车...

标签: c++ arrays dynamic input getline


【解决方案1】:

最简单的解决方案是使用矢量容器:

 std::vector<std::string> arr;

然后:

arr.push_back(line);

【讨论】:

    【解决方案2】:

    使用vector&lt;string&gt; vec;

    从文件中读取的更好方法如下

    string line;
    
    while (getline(cin, line)) {
    
    if (line.empty()) {
        break;
    }
    vec.push_back(line);
    // code
    
    }
    

    一旦到达 EOF,循环就会中断...

    【讨论】:

    • 太棒了!感谢大家的回答,我现在正试图掌握 std::vector 的窍门。假设在将 getline 输入存储到 vec 后,我想将某些字符串(vec[0] 等)转换为 int 或 double,这可以在 vec 内完成还是必须初始化新变量或向量?谢谢!
    • 不,不能在矢量内完成 stringstream 对于这种转换非常方便..check this
    • 谢谢,我会看看并告诉你;)
    • 我想我会使用int var1=atoi(vec[0]);int var1=atoi(vec.at[0]); 而不是使用stringstream,但它们都不起作用......有什么想法吗?
    • 这里说要避免像“谢谢”这样的cmets,但是..你这个男人哈德斯!祝你今天过得愉快! ;)
    猜你喜欢
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多