C语言__TID__用法,c语言中sscanf函数的高级用法

本文详细介绍了sscanf函数的使用方法,包括其格式化输入、跳过指定数据、正则表达式匹配等功能。通过示例展示了如何从字符串中提取特定数据,如过滤、提取字符串和数字等。同时,讲解了width参数的作用,用于控制读取的字符串长度。sscanf的返回值可用于判断读取是否成功,结合正则表达式,能实现更复杂的文本处理任务。
摘要由CSDN通过智能技术生成

sscanf函数用来从给定字符串中读取所需数据,用在一些数据转换时比较方便。常见用法和scanf类似,用%s,%d等获取字符串和整数。但在%号后可以支持更多的格式,甚至是正则表达式,这样一来sscanf的功能就比较强大了。

sscanf函数的原型:int sscanf( string str, string fmt, mixed var1, mixed var2 ... );

其中的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的任意字符,(尽可能多的匹配)

常见的用法举例:读取字符串和数字,并打印等。

f64500b7cd41666ec5650921dc3e5cfc.png

sscanf读取字符串或数字时,默认以空格作为分割。如果一个字符串中没有空格,那么我们就需要使用正则表达式来精确匹配读取字符串。

如下题:

char cText[100] =“Cmd=load|Jid=test1|Tid=2|Num=1342|;”

现在需要把cText的内容中的

Jid的值存放到一维数组cJob[20]中;

Tid的值存放到变量int nTid中;

Num的值存放到变量long long int ll_num中。

分析:

第一:Cmd的值需要过滤掉,这可以通过*来实现

第二:Jid的值如果直接通过%s来获取的话,那么没有空格,会把整个字符串都读取了,所以需要用正则表达式的方法。

解答如下图:

9864bc66a6b20d3ee9b2d49754268ec5.png

sscanf函数的返回值表示本次读取的数据个数,可以用来判断读取数据是否成功!再结合正则表达式,sscanf就可以实现一些更高级的功能!

如下题:

用sscanf将char cSrc[30]="123abcde4567cbd89fwerdf"的数字小于5的 和 字符'b'至'f'的取出来,保存到数组char *cDest中;

分析:

1. 数字小于5和字符在'b'和'f'的正则表达式:[0-5|b-f]

2. 可以利用一个循环,先读取[0-5|b-f]的数据,如果不成功再过滤不在这个范围的字符串

解答如下图:

bdaba58c9d835a10cfa777b2a2071539.png

最后再举例format中width的使用。width表示读取多少个字符串。

如下题:

用sscanf将char cSrc[10]="123456789"的前5位保存到数组char cDest[6]中

解答如下图:

9a790308b2aadf8a7bf521d524a38b8d.png

举报/反馈

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值