C/C++ sscanf 问题

2015-05-04 12:22:15 +08:00
 gason406
要从“12.32[45623]”中分别提取出“12”,“32”,“45623”,应该怎么做?
使用sscanf(“12.32[45623]”,"%d.%d[%d]",&a,&b,&c)会导致最后一个变量c不能正常读入。
我查了一下sscanf支持正则表达式,然而初学者并不会= =
并且我觉得可能是因为所要求的格式中有[]这个符号,干扰了读取格式。
或者能否用sstream完成要求?
1278 次点击
所在节点    C
7 条回复
LU35
2015-05-04 12:29:54 +08:00
直挨个检测是否为数字,不是则保存。
Monad
2015-05-04 12:41:28 +08:00


zeroday
2015-05-04 13:39:38 +08:00
测试了一下楼主的代码,得到的结果似乎没有问题。
cover
2015-05-04 14:54:17 +08:00
觉得 可能 []是特殊字符 就加反斜杠就好了。。。
ujfj1986
2015-05-04 15:43:23 +08:00
[]不是C/C++中的特殊字符,不知道楼主是在什么硬件平台上运行的代码?能不能贴一下代码?
gason406
2015-05-04 18:59:46 +08:00
@Monad
@zeroday
@ujfj1986 sorry我找到bug了,不是这个的问题…是我要把a、b、c用作浮点数于是就直接省事写%lf ,然后就悲剧了,格式里的点和浮点数的点冲突,所以c没读入……

总结:撸码撸少了

另,要提取[]之间的正则表达式写法是不是%*[^[]/%[^]] ,要不要打反斜杠?
ujfj1986
2015-05-05 18:24:20 +08:00
[]是正则表达式中的特殊字符,应该加。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/188305

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX