sscanf详解

一、sscanf函数原型
功能:从一个字符串中读进与指定格式相符的数据. 
原型: int sscanf(char *str, char *format, mixed var1, mixed var2 ... ); 
参数1:str        用于输入的字符串
参数2:format  格式控制字符串
参数3:后面是变参,用来保存指定格式str的内容

二、format格式控制

2.1 基本格式控制

%s  匹配字符串直到遇到空格
%d  匹配输入的字符串中的整数直到遇到非数字
%f  匹配输入字符串中的浮点数直到遇到非数字

 char *str="abcde123456adc123.5",buf[20];
//char *str="abcde 123456adc123.5",buf[20];//有空格就不用位宽控制了
 int n;
 float f;
 sscanf(str,"%5s%d%*[a-z]%f",buf,&n,&f);
 printf("%s\t%d\t%f",buf,n,f);
format含义:

假设有个指针指向字符串的首地址

%5s将内容保存为字符串,字符串长度为5,匹配完后指针指向数字1

%d 将指针开始的连续内容保存为整数,匹配完后指针指向字符a

%*[a-z]忽略小写的字符串,匹配完后指针指向数字1

%f 将指针开始的连续内容保存为浮点数,sscanf调用结束

 int n;
 float f;
 char buf[20];

 sscanf("123456ABCabc123.456","%6d%6s%f",&n,buf,&f);
 printf("%d\t%s\t%f\n",n,buf,f);
 sscanf("123456ABCabc123.456","%d%6s%f",&n,buf,&f);
 printf("%d\t%s\t%f\n",n,buf,f);
以上两个输出完全一样
2.2  类正则表示式格式控制

%*xxx   忽略匹配到的内容,后面的XXX是匹配的模式,即跳过这些
%[xxx]  [ ]这是类正则表达式的基本形式,xxx里面就是它的匹配模式
%[a-z]  匹配所有的小写字符,直到遇到不是小写字符
%[0-9] 匹配所有的数字,直到遇到不是数字
%[A-Z] 匹配所有的大写字符,直到遇到不是大写字符
%[a-zA-Z] 匹配所有的字符,直到遇到不是字符
%[^xxx]  匹配字符,直到xxx出现
%[^a-z] 匹配所有的字符,直到遇到小写字符
%[^0-9] 匹配所有字符,直到遇到数字
%[^#] 匹配所有字符,直到遇到#

注:使用%[xxx]匹配的内容,只能用字符串来接收它,%[0-9]接收它的不能是int类型只能是char *

 char buf[20],buf1[20],buf2[20];
 int n;
 sscanf("12345abcdefABCDEF","%[0-9]%[a-z]%[A-Z]",buf,buf1,buf2);
 printf("%s\t%s\t%s",buf,buf1,buf2);
还是假设一个指针指向字符串开头

%[0-9] 匹配所有的数字,直到不是数字为止   指针指向字符a
%[a-z] 匹配所有的小写字符,指针指向A
%[A-B]匹配所有的大写字符,指针指向结尾

char buf[20],buf1[20],buf2[20];
int n;
sscanf("12345abcdefABCDEF","%[^a-z]%[^A-B]%s",buf,buf1,buf2);
printf("%s\t%s\t%s",buf,buf1,buf2);

%[^a-z] 匹配所有字符,直到到遇到小写字母,指针指向a
%[^A-B] 匹配所有字符,直到遇到大写字符,指针指向A

%s  匹配所有字符

//将字符串按符号#来进行截取
char buf[20],buf1[20],buf2[20],buf3[20],buf4[20],buf5[20];
sscanf("Notebook#ThinkPad#12000#6#X32#IBM","%[^#]#%[^#]#%[^#]#%[^#]#%[^#]#%s",buf,buf1,buf2,buf3,buf4,buf5);
printf("%s\n%s\n%s\n%s\n%s\n%s\n", buf,buf1,buf2,buf3,buf4,buf5);

%[^#] 匹配所有字符,直到遇到#,指针指向字符#
%[^#]# 匹配所有字符,直到遇到#,指针指向字符#,然后再忽略掉字符#,指针指向字符T
%[^xxx]xxx 这是个很有用的模式,就是匹配字符串直到分隔符然后再跳过分隔符

注:当前指针指向的那个字符

参看文章:

http://www.cnblogs.com/gmh915/archive/2009/09/30/1576995.html

http://hi.baidu.com/pursuitofacm/item/d1e5ecfe93055804ff358230

 


  • 16
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值