gason406
V2EX  ›  C

C/C++ sscanf 问题

  •  
  •   gason406 · May 4, 2015 · 2675 views
    This topic created in 4204 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
    LU35
    May 4, 2015 via Android
    1
    直挨个检测是否为数字,不是则保存。
    Monad
    Monad
    May 4, 2015
    2


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

    总结:撸码撸少了

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