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读取遇到空格停止的特性。

  • 相关阅读:
    LeetCode "Jump Game"
    LeetCode "Pow(x,n)"
    LeetCode "Reverse Linked List II"
    LeetCode "Unique Binary Search Trees II"
    LeetCode "Combination Sum II"
    LeetCode "Divide Two Integers"
    LeetCode "First Missing Positive"
    LeetCode "Clone Graph"
    LeetCode "Decode Ways"
    LeetCode "Combinations"
  • 原文地址:https://www.cnblogs.com/1625--H/p/10262343.html
Copyright © 2011-2022 走看看