sscanf详解

sscanf详解一 sscanf 函数原型功能 从一个字符串中读进与指定格式相符的数据 nbsp 原型 intsscanf char str char format mixedvar1 mixedvar2 nbsp 参数 1 str nbsp nbsp nbsp nbsp 用于输入的字符串参数 2 format nbsp 格式控制字符串参数 3 后面是变参 用来保存指定格式 str 的内容二 format 格式控制

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












二、format格式控制

2.1 基本格式控制

 char *str="abcdeadc123.5",buf[20]; //char *str="abcde adc123.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("ABCabc123.456","%6d%6s%f",&n,buf,&f); printf("%d\t%s\t%f\n",n,buf,f); sscanf("ABCabc123.456","%d%6s%f",&n,buf,&f); printf("%d\t%s\t%f\n",n,buf,f);

以上两个输出完全一样

2.2  类正则表示式格式控制

注:使用%[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);

还是假设一个指针指向字符串开头

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);

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

参看文章:

 






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207414.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午1:53
下一篇 2026年3月19日 下午1:53


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号