V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
gason406
V2EX  ›  C

C/C++ sscanf 问题

  •  
  •   gason406 · May 4, 2015 · 2159 views
    This topic created in 4017 days ago, the information mentioned may be changed or developed.
    要从“12.32[45623]”中分别提取出“12”,“32”,“45623”,应该怎么做?
    使用sscanf(“12.32[45623]”,"%d.%d[%d]",&a,&b,&c)会导致最后一个变量c不能正常读入。
    我查了一下sscanf支持正则表达式,然而初学者并不会= =
    并且我觉得可能是因为所要求的格式中有[]这个符号,干扰了读取格式。
    或者能否用sstream完成要求?
    7 replies    2015-05-05 18:24:20 +08:00
    LU35
        1
    LU35  
       May 4, 2015 via Android
    直挨个检测是否为数字,不是则保存。
    Monad
        2
    Monad  
       May 4, 2015


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

    总结:撸码撸少了

    另,要提取[]之间的正则表达式写法是不是%*[^[]/%[^]] ,要不要打反斜杠?
    ujfj1986
        7
    ujfj1986  
       May 5, 2015   ❤️ 1
    []是正则表达式中的特殊字符,应该加。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2524 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 02:36 · PVG 10:36 · LAX 19:36 · JFK 22:36
    ♥ Do have faith in what you're doing.