scanf("%[A-B]",&a);中%[A-B]的意思是?
匹配字符串, 但只能匹配由A或B组成的字符串,
*
比如ABAAC, a = "ABAA", 后面C被放弃,因为不在A-B的范围,
*
通常用于特定模式输入, 比如只能输入数字的字符串[0-9].
这是模式匹配,匹配你的输入中的A或者B
不知道你这个问题是否已经解决, 如果还没有解决的话:1、常用的总结如下:
(1)%[0-9]表示只读入’0’到’9’之间的字符
(2)%[a-zA-Z]表示只读入字母
(3)%[^a-z]就表示读入小写字母之外的字符。 ^表示除XXX之外。
(4)"%n[^=]" 读入"="号前的至多n 个字符
(5)在符号前面加^,比如 “%[^:]” 就是除了冒号其他字符都可以输入,唯独忽略冒号,可输入的字符是除去冒号的字符集补集。
'-'是范围连接符,当然也可以直接列出需要读入的字符。
2、
%c 一个单一的字符
%d 一个十进制整数
%i 一个整数
%e, %f, %g 一个浮点数
%o 一个八进制数
%s 一个字符串
%x 一个十六进制数
%p 一个指针
%n 一个等于读取字符数量的整数
%u 一个无符号整数
%[] 一个字符集
%% 一个精度符号
例如从键盘输入的"1235ab86"中读取1235、86给n。
#include <stdio.h>
int skip(){
scanf("%*[^0-9]"); //跳过读入 除了0-9 的字符
return 1;
}
int main()
{
int n;
while(skip()&&~scanf("%d",&n)) //再读入skip处理后的字符给n
printf("%d\n",n);
return 0;
}
//输出为:1235
//86
整数部分的高位有多余的0时,过滤0以获取不含0的整数
#include <stdio.h>
int str[100];
int fun(){
scanf("%[^1-9]",&str); //读入字符,如果遇到非1-9的字符,停止
return 1;
}
int main()
{
while(fun()&&~scanf("%s",&str)){ //scanf再次读入经fun处理后的字符串,会覆盖fun读入的字符
puts(str); //这样可以达到删去不想要的字符的目的
}
return 0;
}
//输入0000001234,56
//输出1234,56
根据第一例,也可使用跳过字符的方式获取
#include <stdio.h>
int str[100];
int skip(){
scanf("%*[^1-9][^,]"); //跳过读入非1-9和非,的字符
return 1;
}
int main()
{
while(skip()&&~scanf("%s",&str)){ //scanf再次读入经skip处理后的字符串
printf("%s",str); //这样可以达到删去不想要的字符的目的
//也可以在跳过读取后,scanf输入给int变量n而不是字符数组str,修改相应输入输出可灵活变换
}
return 0;
}
这是正则表达式