C语言函数sscanf()的用法

时间:2021-02-25 02:10:32

C语言函数sscanf()的用法

sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。

输入格式为HH:MM:SS的字符串,输出HH,MM,SS.

#include <stdio.h>
int main()
{
// const char* s = "iios/12DDWDFF@122";
char s[20];
char buf[20];
scanf("%s",s);
char a[20],b[20],c[20];
sscanf( s, "%[^:]:%[^:]:%2s", a, b,c );
printf("%s %s %s",a,b,c);
return 0;
}

以下为百度内容:

支持集合操作:

  %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
  %[aB’] 匹配a、B、’中一员,贪婪性
  %[^a] 匹配非a的任意字符,贪婪性

常见用法

  1. char buf[512] = ;
    sscanf(“123456 “, “%s”, buf);
    printf(“%s\n”, buf);
      结果为:123456
  2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
      sscanf(“123456 “, “%4s”, buf);
      printf(“%s\n”, buf);
      结果为:1234
  3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
      sscanf(“123456 abcdedf”, “%[^ ]”, buf);
      printf(“%s\n”, buf);
      结果为:123456
  4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
      sscanf(“123456abcdedfBCDEF”, “%[1-9a-z]”, buf);
      printf(“%s\n”, buf);
      结果为:123456abcdedf
  5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
      sscanf(“123456abcdedfBCDEF”, “%[^A-Z]”, buf);
      printf(“%s\n”, buf);
      结果为:123456abcdedf
    6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 “iios/”过滤掉,再将非’@’的一串内容送到buf中
      sscanf(“iios/12DDWDFF@122”, “%*[^/]/%[^@]”, buf);
      printf(“%s\n”, buf);
      结果为:12DDWDFF
    7、给定一个字符串““hello, world”,仅保留world。(注意:“,”之后有一空格)
      sscanf(“hello, world”, “%*s%s”, buf);
      printf(“%s\n”, buf);
      结果为:world
      %*s表示第一个匹配到的%s被过滤掉,即hello被过滤了
      如果没有空格则结果为NULL。
      sscanf的功能很类似于正则表达式, 但却没有正则表达式强大,所以如果对于比较复杂的字符串处理,建议使用正则表达式.