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

C/C++ sscanf 问题

  •  
  •   gason406 · 2015-05-04 12:22:15 +08:00 · 1263 次点击
    这是一个创建于 3273 天前的主题,其中的信息可能已经有所发展或是发生改变。
    要从“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
    LU35
        1
    LU35  
       2015-05-04 12:29:54 +08:00 via Android
    直挨个检测是否为数字,不是则保存。
    Monad
        2
    Monad  
       2015-05-04 12:41:28 +08:00


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

    总结:撸码撸少了

    另,要提取[]之间的正则表达式写法是不是%*[^[]/%[^]] ,要不要打反斜杠?
    ujfj1986
        7
    ujfj1986  
       2015-05-05 18:24:20 +08:00   ❤️ 1
    []是正则表达式中的特殊字符,应该加。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   998 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 125ms · UTC 22:43 · PVG 06:43 · LAX 15:43 · JFK 18:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.