zoukankan      html  css  js  c++  java
  • sscanf的使用

    sscanf的使用

    语法

    int ssanf(const char *buffer, const char *format,[argument]...);

    参数

    • buffer 存储的数据
    • format 控件字符串
    • argument 可选自变量

    说明

    第二个参数可以是一个或者多个 {%[*] [width] [{h | I | I64 | L}]type | ' ' | ' ' | ' ' | 非%符号}

    这个参数说明暂时不清楚,先不用管它,稍后通过例子来说明

    返回值

    函数将返回成功赋值的字段个数;返回值不包括已读取但未值的字段个数。返回值为0表示在第一次读取之前到达字符串结尾,则返回EOF

    sscanf("1 2 3","%d %d %d",buf1, buf2, buf3); 
    //成功调用返回值为3,即buf1,buf2,buf3均成功转换。
    sscanf("1 2","%d %d %d",buf1, buf2, buf3); 
    //成功调用返回值为2,即只有buf1,buf2成功转换。
    sscanf("hello, world", "%*s%s", buf);
    //成功调用返回值为1,buf成功转换
    

    使用实例

    1. 一般用法——将一字符串赋值给另一个字符串

      sscanf("123456","%s",buf);

    2. 取指定长度的字符串

      sscanf("1233456","%4s",buf);

    3. 取到指定字符为止的字符串

      sscanf("123456 abcdef","%[^ ]",buf)

      其中[^ ]^ 表示全集中除去空格的集合。是自定义的一种规则。

    4. 取到指定字符集为止的字符串

      sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);

      其中[^A-Z]表示全集中除去[A-Z]的集合,也就是说遇到不是该集合中的字符就停止读取。

    5. 取仅包含指定字符集的字符串

      sscanf("123456abcdeBCDEF","[1-9a-z]",buf);

      其中[1-9a-z]表示集合,用[1-9,a-z]表示也可以

    6. 给定一个字符串iios/12DDWDFF@122 ,获取/ 和 @ 之间的字符串,可以按照前面第3条规则,来读取。

      sscanf("iios/12DDWDFF@122 ","%*[^/]/%[^@]",buf);

      其中%*[^/]/%[^@]表示先读取到遇到 /为止的字符串(/并没有读入),然后因为有*所以不写入,中间加的一个/是为了读取缓冲区中的/,紧接着%[^@]读取遇到@的字符串,写入到buf里面。

    7. 分割字符串

      sscanf("hello, world","%*s%s",buf);

      最终写入buf的是world。因为这利用了%s读取遇到空格停止的特性。

  • 相关阅读:
    【算法导论】第11章,散列表
    【算法导论】第10章,基本数据结构
    【推荐系统实践】冷启动问题
    【算法导论】第8、9章,线性时间排序,中位数顺序统计量
    【推荐系统实践】协同过滤
    Java编程思想---第五章 初始化与清理(下)
    Java编程思想---第五章 初始化与清理(上)
    Java编程思想---第四章 控制执行流程
    Java编程思想---第三章 操作符
    去除MyEclipse频繁弹出的Update Progress窗口
  • 原文地址:https://www.cnblogs.com/1625--H/p/10262343.html
Copyright © 2011-2022 走看看