scanf的正则表达式总结

简介:

scanf作为C语言的格式化输入函数,定义于stdio.h中,本文总结一下scanf与正则表达式相关的地方。(注意:假设输入中无空格,空格将做特殊说明)

1 //scanf函数原型
2 int scanf(const char *format,...);

*format指向一个描述输入格式的字符串,使用正则表达式。
匹配时从左往右,如果某个匹配没有执行,那么后面的匹配也就不会执行下去。

1 scanf("%d%s",&x,str);
2 //输入 hello
3 //会有什么情况呢
4 //%s是匹配hello的,但是%d不匹配,所以整个匹配过程无法执行下去,所以变量没有接收任何值。

 

正则表达式匹配使用贪婪算法,即算法可能多的匹配字符。

1 //比如
2 char str[10],int x;
3 scanf("%s:%d",str,&x);
4 printf(%s %d,str,x);
5 //输入 kryptosx:001
6 //你预计输出 kryptosx 001
7 //但事实上输出 kryptosx:001 4252772

 

这是因为%s在匹配时直接把”kryptosx:001“全匹配掉了,应为贪心要求尽可能的匹配。4252772是x未初始化的值,因为x并没有匹配到输入。

匹配的集合操作
[a-z0-9] 表示匹配a到z中任意字符,以及1到9的任意字符。
[zJ3.] 匹配’a’,’J’,’3′,’.’中任意一员。
[^a-z] 匹配非a-z中的任意字符,^表示取反。

1 //示例
2 scanf("%[a-z]",str);
3 printf("%s:",str);
4 //输入 aasdfwer234234
5 //输出 aasdfwer
6  
7 scanf("%[^a]a%d",str,&x);
8 //这里注意的是[^a]后的a,思考一下为什么这后面要带个a。

 

%符号总结
%后跟着读取的符号,除了*外,顺序对应后面的变量(准确的说是变量地址),通常的%s,%d就不说了,很常用。
%4s,表示匹配长度为4的字符串,%4d等类同。
%*是指忽略匹配的字符,比如“%*[a-z]”,忽略匹配[a-z]的字符。可以把%*看作%的兄弟,只是%是读入到变量,%*是跳过。

1 //网上的一个题目
2 //从<sip:tom@172.18.1.133>中取出tom
3 scanf("%*[^:]:%[^@]",str);
4 //分析:首先,%*[^:]忽略掉开头字符串,直到:,然后读取tom,以@为终止符。

 

转载请注明:旅途@KryptosX » scanf的正则表达式总结

目录
相关文章
|
4月前
|
存储 C语言
c语言获取终端输入字符串的函数scanf,gets,fgets
c语言获取终端输入字符串的函数scanf,gets,fgets
51 1
|
9天前
|
C++
大小写转换——islower/isupper或者tolwer/toupper函数的用法
大小写转换——islower/isupper或者tolwer/toupper函数的用法
15 0
|
14天前
|
存储 C语言
爱上C语言:scanf、gets以及getchar输入字符串你真的懂了吗
爱上C语言:scanf、gets以及getchar输入字符串你真的懂了吗
|
1月前
|
机器学习/深度学习 C++ iOS开发
C++中的格式控制
C++中的格式控制
|
3月前
|
数据安全/隐私保护
scanf与getchar连用的注意事项
这里主要讲述scanf函数和getchar函数连续使用的注意事项
31 2
|
8月前
scanf和getchar区别
scanf和getchar区别
129 0
|
4月前
|
C语言
深入理解字符串函数和字符函数(islower和isupper、tolower和toupper、strlen、strcpy、strcat、strcmp)(一)
深入理解字符串函数和字符函数(islower和isupper、tolower和toupper、strlen、strcpy、strcat、strcmp)(一)
|
7月前
while(~scanf(“%d“,&a)&&~a)用法
while(~scanf(“%d“,&a)&&~a)用法
58 0
|
9月前
|
安全 C++ 数据格式
C++ 字符串格式化转为 数据变量 - sscanf,sscanf_s及其相关用法
C++ 字符串格式化转为 数据变量 - sscanf,sscanf_s及其相关用法
147 0
|
10月前
|
C语言
C语言常见输入函数(scanf(),getchar(),getche(),getch(),gets())大汇总
C语言常见输入函数(scanf(),getchar(),getche(),getch(),gets())大汇总
70 0