头文件:stdio.h
函数原型:int sscanf("字符串","格式字符串",char* 缓冲区);
举个简单的例子
#include<stdio.h>
int main(){
char buffer[256]={0};
sscanf("aaaaaa","%s",buffer);
printf("%s",buffer);
}
格式字符串里面可以放的东西有如下这些:
可放的东西 | 说明 |
---|---|
% | 匹配字符,格式字符串开头必须要有的东西 |
* | 表示忽略,比如%*c表示忽略一个字符 |
[ ] | 表示一个集合,匹配到集合里面的东西可以放行,否则就停止, 比如%[0123456789]、%[0-9]、%[abcde]、%[a-b] |
^ | 要放在[ ]里面,表示匹配到"^"之后的任意一个字符就停止,比如 %[^abc]、%[^1234] |
长度数 | 表示要输入的数量,要放在%和类型说明符的中间,比如%5c表示输入5个char字符 |
转义字符 | \n、\t之类的 |
类型说明符 | d、c、s之类的 |
其他字符 | a、b、@、1、l、#...都可以,如果输入的字符串含有这些字符,会被忽略掉 |
逐个介绍格式字符串里面的东西:
星号*
#include<stdio.h>
int main(){
char buffer[256]={0};
sscanf("aaaaaa","%*s",buffer);
printf("%s",buffer);
}
方括号[ ]
#include<stdio.h>
int main(){
char buffer[256]={0};
sscanf("12345aaaaaa","%[1-9]",buffer);
printf("%s",buffer);
}
乘方号^
#include<stdio.h>
int main(){
char buffer[256]={0};
sscanf("abcdef12345aaa","%[^1-9]",buffer);
printf("%s",buffer);
}
长度数
#include<stdio.h>
int main(){
char buffer[256]={0};
sscanf("abcdef12345aaa","%5s",buffer);
printf("%s",buffer);
}
其他字符
#include<stdio.h>
int main(){
char buffer[256]={0};
sscanf("12345abcdeaaa","12345%s",buffer);
printf("%s",buffer);
}
下面来介绍一个综合运用:
去掉序列码中的“-”
#include<stdio.h>
int main(){
char buffer1[256]={0},buffer2[256]={0},buffer3[256]={0},buffer4[256]={0};
sscanf("2312a41-231sd245f12-57473jgh4-43vnv2243","%[0-9a-z]-%[0-9a-z]-%[0-9a-z]-%[0-9a-z]"
,buffer1,buffer2,buffer3,buffer4);
printf("%s",buffer1);
printf("%s",buffer2);
printf("%s",buffer3);
printf("%s",buffer4);
}
scanf也有类似的功能
此处不再赘述,只举一个简单的例子
#include<stdio.h>
int main(){
char buffer[256]={0};
scanf("%[1-9]",buffer);
printf("%s",buffer);
}