我有一个以下格式的文本文件:
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 循环中被读入数据,程序将事情搞砸了。我该如何解决这个问题?
您可以尝试一个字符一个字符地阅读。
char ch;
data = "";
cin >> std::noskipws;
while( cin >> ch && ch != '\n' ) {
if ( ch == " " ) {
// do stuff with data
data = "";
continue;
}
data += ch;
}
cin >> std::skipws;
我知道这是一个老问题,但这是我对这个问题的更简单的解决方案。只需使用
do-while
。
#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;
}