sscanf忽略所有符号,包括换行符

时间:2015-08-14 10:43:57

标签: c++ string parsing scanf

我有一个字符串,其中包含来自文件的数据,此处为示例

string str = "File:./img/Char2.png\r\n
Size:128x128\r\n
Frames:2\r\n
Hand:79x54\r\n
Horizontal_Animated:0"

使用这个字符串我希望初始化变量,但是打了一个问题: 我想用sscanf(str.c_str(),"%*s Size:%dx%d",&Width,&Height) 解析这个字符串并且它有效,但有一件事我不喜欢: 对于sscanf的第二次,第三次....调用我需要再添加一个%*s,因为这个事情不会忽略\r\n,所以下一个代码看起来像这样:

sscanf(contents.c_str(),"%*s %*s Frames:%d",&MaxFrames);
sscanf(contents.c_str(),"%*s %*s %*s Hand:%dx%d",&HandX,&HandY)

那么,如何在没有%*s吨的情况下更改格式字符串进行正确解析?

PS。我知道C ++ 11中的正则表达式,但我对解决方案很好奇

1 个答案:

答案 0 :(得分:0)

由于数据已经在std::string,我首先使用std::stringstreamstd::getline将整个字符串拆分为行。完成后,sscanf足以解析各行。

分裂的C stdlib方法是使用strtok。但是,当它修改字符串时,您无法在std.c_str()上直接使用它。您必须先使用strdup制作可修改的副本。

但当然,可以在这里考虑正则表达式。