我需要使用C ++读取带空格的文本,然后是数值。
例如,数据看起来像:
text1
1.0
text two
2.1
text2 again
3.1
使用2 "infile >>"
语句无法读入。 getline
我没有运气
无论是。我最终想用这两个数据元素填充struct
。有什么想法吗?
答案 0 :(得分:1)
为什么呢?您可以使用getline提供空格作为行分隔符。然后缝合提取的部分,如果下一个是数字。
答案 1 :(得分:1)
标准IO库不会单独为您执行此操作,您需要对数据进行某种简单的解析以确定文本的结束位置和数值开始。如果你可以做一些简化的假设(比如说每行只有一个文本/数字对,并且最小的错误恢复),那么将整个事物放入字符串然后手动扫描就不会太糟糕了。否则,你可能最好使用正则表达式或解析库来处理这个问题,而不是重新发明轮子。
答案 2 :(得分:0)
如果您可以确定您的输入格式正确,您可以尝试这样的示例:
#include <iostream>
#include <sstream>
int main()
{
std::istringstream iss("text1 1.0 text two 2.1 text2 again 3.1");
for ( ;; )
{
double x;
if ( iss >> x )
{
std::cout << x << std::endl;
}
else
{
iss.clear();
std::string junk;
if ( !(iss >> junk) )
break;
}
}
}
如果你确实需要验证输入(而不是仅仅尝试解析看起来像是double的东西),你将不得不编写某种解析器,这并不难但很无聊。
答案 3 :(得分:0)
伪代码。
这应该有效。但是,它假设您有成对的文本/数字。你也必须做一些噱头才能让所有打字都快乐。
while( ! eof)
getline(textbuffer)
getline(numberbuffer)
stringlist = tokenize(textbuffer)
number = atof(numberbuffer)