`
hulianwang2014
  • 浏览: 726309 次
文章分类
社区版块
存档分类
最新评论
  • bcworld: 排版成这样,一点看的欲望都没有了
    jfinal

sscanf使用经验分享

 
阅读更多

sscanf() - 从一个字符串中读进与指定格式相符的数据.

函数原型

  Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );

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

  说明:

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

  其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}

有以下几个注意点:

  1. * 可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入。

  2. {a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。

  3. width表示读取宽度。

  4. {h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。

  5. type :这就很多了,就是%s,%d之类。

  6. 特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值

  支持集合操作:

  %[a-z] 表示匹配a到z中任意字符

  %[aB'] 匹配a、B、'中一员

  %[^a] 匹配非a的任意字符

例子(来自个人经验,慢慢积累)

1.例如通过串口获得控制指令,控制指令的格式为ch,n。其中ch代表通道指令,n代表通道号,n为整数。
	uint8_t channel_id = 0;
	char buf[32];
	uart_readbuf(buf,len);
	sscanf(buf,"ch,%d",channel_id);

sscanf有返回值,返回值为匹配数量。
若当输入n为非法值时,返回值为0.否则为1.例如输入ch,x。修改以上代码:
	uint8_t channel_id = 0;
	char buf[32];
	uart_readbuf(buf,len);
	if( sscanf(buf,"ch,%d",channel_id) == 1)
	{
		// do something
	}

例子(来自网上资料)

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。


8.时间格式处理

处理时间 格式XXXX-XX-XX

#include <stdio.h>
#include <stdlib.h>
int main(void) {

  int a, b, c;
  sscanf("2013:02:21", "%d:%d:%d", &a, &b, &c);
  printf("Date:%d-%d-%d",a,b,c);
  return EXIT_SUCCESS;
}


分享到:
评论

相关推荐

    sscanf ,sscanf ,sscanf

    以下是一些使用 `sscanf` 解析字符串的具体示例: 1. **常规用法**: ```c char buf[512]; sscanf("123456", "%s", buf); printf("%s\n", buf); ``` 输出结果为:`123456` 2. **读取指定长度的字符串**: ...

    sscanf函数的高级用法

    ### sscanf函数的高级用法详解 #### 一、sscanf函数概述 `sscanf`是C语言中的一个标准库函数,用于从一个字符串中解析指定格式的数据。它类似于`scanf`函数,但输入源不是标准输入(如键盘),而是用户指定的字符...

    sscanf使用方法

    下面将详细介绍`sscanf`的使用方法、参数、返回值以及一些常见的使用场景。 `sscanf`函数的声明如下: ```c int sscanf(const char *str, const char *format, ...); ``` 1. **参数解析**: - `str`:这是要读取的...

    sscanf_sscanf_solutioncw5_

    压缩包内的`sscanf.c`文件可能包含了多个`sscanf`的使用案例,通过阅读和运行这些代码,开发者能够深入理解`sscanf`的工作原理以及在不同情况下的应用方法。而`db-4.6.21.tar.gz`文件,根据命名规则,这可能是...

    sscanf练习详解-分割字符串

    本篇文章将深入讲解如何使用`sscanf`来有效地分割字符串。 `sscanf`函数的基本语法如下: ```c int sscanf(const char *str, const char *format, ...); ``` 这里,`str`是指向要读取的字符串的指针,`format`是一...

    sscanf函数的高级用法doc

    ### sscanf函数的高级用法详解 #### 一、sscanf函数简介 `sscanf`是C语言中的一个标准库函数,用于从一个字符串中解析出指定格式的数据,并将其存储到对应的变量中。它与`scanf`函数非常相似,但不同之处在于`...

    sscanf陷阱

    ### sscanf陷阱:内存越界的隐患 #### 一、sscanf函数简介 `sscanf`是C语言中的一个标准库函数,用于从字符串中解析输入。它的工作方式类似于`scanf`函数,但`sscanf`是从指定的字符串中读取数据而不是从标准输入...

    sscanf()用法domeVs2010

    在Visual Studio 2010环境下,开发者经常使用`sscanf()`来处理字符串输入,特别是在需要从已有的字符串中解析特定格式的数据时。下面我们将详细介绍`sscanf()`函数的用法,并结合在VS2010中的应用进行深入探讨。 ##...

    sscanf 详解

    下面通过几个具体的例子来进一步理解`sscanf`的使用方法: ##### 1. 基础使用 ```c char buf[512]; sscanf("123456", "%s", buf); printf("%s\n", buf); ``` 结果为:123456 ##### 2. 指定长度的字符串 ```c ...

    sscanf()的用法

    `sscanf()`的灵活性在于能够根据指定的格式从字符串中提取数据,并且可以使用`*`来忽略某些部分,或者使用`width`限制读取的长度。然而,对于更复杂的数据解析任务,尤其是涉及到正则表达式的情况,可能需要使用其他...

    sscanf和sprintf输入输出控制

    ### sscanf和sprintf输入输出控制 #### 一、sscanf函数详解 **sscanf** 是一个强大的函数,用于从字符串中解析格式化的输入。它的工作原理类似于 **scanf** 函数,但是 **sscanf** 从一个字符串中读取数据而不是从...

    关于sscanf函数

    ### 关于sscanf函数 #### 一、简介 `sscanf`函数是C语言标准库中的一个重要函数,用于从字符串中解析数据,并将其存储到指定...不过,在面对更加复杂的字符串解析任务时,推荐使用正则表达式或其他高级文本处理技术。

    C语言sscanf正则表达用法总结

    详细的c语言正则表达式用法,sscanf的正则表达不会用的必看

    sscanf,sprintf,fscanf,fprintf 系列函数的用法小结 doc

    - `{a|b|c}`:从`a`、`b`或`c`中选择一个使用。 - `[d]`:`d`是可选的。 - `width`:指定读取的最大字符数。 - `{h|l|I64|L}`:指定读取数据的大小。 - `h`:短整型。 - `l`:长整型。 - `I64`:64位整型。 - `L...

    matlab_中sscanf__函数的使用.doc

    Matlab 中 sscanf 函数的使用 Matlab 中的 sscanf 函数是用于从一个字符串中读取与指定格式相符的数据。该函数的原型为 `Int sscanf( const char *, const char *, ...);`,其中第一个参数是一个字符串,第二个参数...

    基于sscanf实现的迷你json解码库

    基于sscanf实现的json c解码库,体积非常小。实现了字符串,整数,浮点数的解析。纯c实现,易于移植。 只有几十行代码量,编译后体积不到1K。

    sscanf用法例子

    sscanf用法例子 比较小 有兴趣就下

Global site tag (gtag.js) - Google Analytics