我有一个字符串,其中包含来自文件的数据,此处为示例
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中的正则表达式,但我对解决方案很好奇
答案 0 :(得分:0)
由于数据已经在std::string
,我首先使用std::stringstream
和std::getline
将整个字符串拆分为行。完成后,sscanf
足以解析各行。
分裂的C stdlib方法是使用strtok
。但是,当它修改字符串时,您无法在std.c_str()
上直接使用它。您必须先使用strdup
制作可修改的副本。
但当然,可以在这里考虑正则表达式。