【发布时间】:2016-07-07 16:55:26
【问题描述】:
我想从连续的字符串数据流中提取行。但是数据格式不正确,我想丢弃提取的行,以免内存超出范围。
例如,我有这样的串口输出:
第 1 批
POS 30 10 20\n
POS 30 10 21\n
POS 30 1
第 2 批
0 22\n
POS 30 10 23\n
PO
有没有办法有效地保存数据并从中提取行?
这是我的代码:
stringstream ss;
while (SP->IsConnected())
{
string result = SP->ReadData();
ss << result;
string oneline;
while(getline(ss, oneline))
{
cout << oneline << endl;
// or do something more interesting...
}
}
但是我的代码不起作用,因为 getline() 修改了字符串流,因此无法向其中插入更多数据,并且我想保持字符串流内存较小。所以我不认为我可以使用 getline() 并使用类似 'popline()' 的东西,如果它存在的话。
【问题讨论】:
-
不确定,但尝试在您的内部
while()循环之后调用ss.clear()? -
为什么不用
std::deque来保存行(每行一个std::string)?您想要的是一个“循环缓冲区”,而流类的设计并非如此。 (标准库中也没有其他功能。)
标签: c++ string stl stringstream