c++ 我想cin读到'\n',但我不能使用getline

hmmo2u0o  于 11个月前  发布在  其他
关注(0)|答案(3)|浏览(104)

我有一个文本文件,格式如下:

info
data1 data2
info
data1 data2 data3 data4...

字符串
问题是:当使用getline()时,数据的计数(和长度)可能非常大,并导致运行时问题。所以我不能将整行读取到std::string中。我尝试了以下方法:

for(int i=0; i<SOME_CONSTANT ; i++){
    string info, data;

    cin >> info;

    while(cin.peek() != '\n' && cin >> data){
         // do stuff with data
    }
}


然而cin.peek()没有做到这一点。信息在while循环中被读入数据,程序把事情搞砸了。我该如何解决这个问题?

gz5pxeao

gz5pxeao1#

你可以试着一个字一个字地阅读。

char ch;
data = "";
cin >> std::noskipws;
while( cin >> ch && ch != '\n' ) {
  if ( ch == " " ) {
    // do stuff with data
    data = "";
    continue;
  }
  data += ch;
}
cin >> std::skipws;

字符串

alen0pnh

alen0pnh2#

使用std::istream::getline代替std::getline。您可以选择缓冲区大小和缓冲区大小。

nle07wnf

nle07wnf3#

我知道这是一个老问题,但这里是我对这个问题的简单解决方案。

#include <iostream>
#include <string>
#define SOME_CONSTANT 3

int main() {
    for(int i = 0; i < SOME_CONSTANT ; i++) {
        std::string info, data;

        std::cin >> info;

        do {
            std::cin >> data;
        } while(std::cin.peek() != '\n');
    }
    return 0;
}

字符串

相关问题