sscanf函数的使用

目录

 前言:

1.函数原型

 2.可与正则表达式配合使用

 3.sscanf函数的使用


 前言:

码友们都知道sprintf()是拼接和格式化字符串的,但很少有人用过sscanf()函数。sscanf()函数的作用和ssprintf()函数的作用相反,它是用来把格式化的字符串进行拆分的。

1.函数原型

sscanf(const char *str, const char *format, ...)

 具体功能如下:

  1. 根据格式从字符串中提取数据。如从字符串中取出整数,浮点数和字符串等。
  2. 取指定长度的字符串。
  3. 取到指定字符为止的字符串。
  4. 取只包含指定字符集的字符串。
  5. 取到指定字符集为止的字符串。

 2.可与正则表达式配合使用

正则表达式:通过一个公式字符串,去匹配特定格式的字符串,判断这个字符串是否满足条件

正则表达式规则:[1-9]:匹配一个字符,这个字符在1-9范围内就满足条件

                             [a-z]:匹配一个字符,这个字符在a-z范围内就满足条件

                             [A,b,H,l,e,f]:匹配一个字符,这个字符在集合中任意一个就满足条件

                             [1-9, f-x]:匹配一个字符,这个字符是1-9, f-x集合中任意一个就满足条件

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                            [^1]:^代表否定,匹配一个字符,这个字符只要不是1就行。

                            [^2-8]:   匹配一个字符,这个字符只要不在2-8范围内就行。

                            [^a-f]: 匹配一个字符,这个字符只要不在a-f范围内就行。

                             [^ ]: 匹配一个字符,这个字符只要不是空格就行。

举例说明:

正则表达式:[1-9][a-z],可以匹配两个字符,如果原字符串是abcdefg1234ABCDEF893b===》3b

 3.sscanf函数的使用

 简单举例:

    char buf[48] = { 0 };
    sscanf("123456 abcdefg", "%[^ ]", buf); //结果为:123456

    sscanf("123456abcdefABCDEF", "%[1-9,a-z]", buf); //结果为:123456abcdef

    sscanf("123456abcdefABCDEF", "%[^a-z]", buf); //结果为:123456ABCDEF

 

解析URL

    const char* s = "http://www.baidu.com:12345";
    char protocol[32] = { 0 };
    char host[128] = { 0 };
    char port[8] = { 0 };
    sscanf(s, "%[^:]://%[^:]:%[1-9]", protocol, host, port);

    printf("protocol: %s", protocol); //结果为:http
    printf("host: %s", host);         //结果为:www.baidu.com
    printf("port: %s", port);         //结果为:12345

 

你可能感兴趣的:(c语言,开发语言)