首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  C/C++/Obj-C

C/C++ sscanf 问题

  •  
  •   gason406 · 2015-05-04 12:22:15 +08:00 · 609 次点击
    这是一个创建于 1631 天前的主题,其中的信息可能已经有所发展或是发生改变。
    要从“12.32[45623]”中分别提取出“12”,“32”,“45623”,应该怎么做?
    使用sscanf(“12.32[45623]”,"%d.%d[%d]",&a,&b,&c)会导致最后一个变量c不能正常读入。
    我查了一下sscanf支持正则表达式,然而初学者并不会= =
    并且我觉得可能是因为所要求的格式中有[]这个符号,干扰了读取格式。
    或者能否用sstream完成要求?
    7 回复  |  直到 2015-05-05 18:24:20 +08:00
        1
    LU35   2015-05-04 12:29:54 +08:00 via Android
    直挨个检测是否为数字,不是则保存。
        2
    Monad   2015-05-04 12:41:28 +08:00


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

    总结:撸码撸少了

    另,要提取[]之间的正则表达式写法是不是%*[^[]/%[^]] ,要不要打反斜杠?
        7
    ujfj1986   2015-05-05 18:24:20 +08:00   ♥ 1
    []是正则表达式中的特殊字符,应该加。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4093 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 19ms · UTC 05:55 · PVG 13:55 · LAX 22:55 · JFK 01:55
    ♥ Do have faith in what you're doing.