一、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
