gpt4 book ai didi

c++ - sscanf make 忽略所有符号,包括换行符

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:22:27 24 4
gpt4 key购买 nike

我有一个字符串,其中包含来自文件的数据,这里是示例

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 的情况下,我如何需要更改格式字符串以进行正确的解析?

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

最佳答案

由于数据已经在 std::string 中,我会首先使用 std::stringstreamstd::getline将整个字符串分成几行。一旦完成,sscanf 就足以解析各个行。

进行拆分的 C stdlib 方法是使用 strtok。但是因为它修改了字符串,所以不能直接在 std.c_str() 上使用它。您必须先使用 strdup 制作可修改的拷贝。

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

关于c++ - sscanf make 忽略所有符号,包括换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32008193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com