资源描述:
《sscanf用法以及正则表达式的用法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、sscanf用法以及正则表达式的运用表头文件#include(stdio.h)定义函数intsscanf(constchar*str,constchar*format,........);函数说明sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。返回值成功则返回参数数目,失败则返回-1,错误原因存于errno中。周星星的代码:#includeintmain(){ constchar*s="iios/12DDWDFF
2、@122"; charbuf[20]; sscanf(s,"%*[^/]/%[^@]",buf); printf("%s",buf); return0;}结果为:12DDWDFFsscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。函数原型:intscanf(constchar*format[,argument]...);其中的format可以是一个或多个{%[*][width][{h
3、l
4、I64
5、L}]type
6、''
7、't'
8、''
9、
10、非%符号},注:{a
11、b
12、c}表示a,b,c中选一,[d],表示可以有d也可以没有d。width:宽度,一般可以忽略,用法如:constcharsourceStr[]="hello,world";charbuf[10]={0};sscanf(sourceStr,"%5s",buf);//%5s,只取5个字符cout<13、l
14、I64
15、L}:参数的size,通常h表示单字节size,I表示2字节size,L表示4字节size(double例外),l64表示8字节size。type:这就很多了,就是%s
16、,%d之类。特别的:%*[width][{h
17、l
18、I64
19、L}]type表示满足该条件的被过滤掉,不会向目标参数中写入值。如:constcharsourceStr[]="hello,world";charbuf[10]={0};sscanf(sourceStr,"%*s%s",buf);//%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了cout<20、,贪婪性1.常见用法。以下是引用片段: charstr[512]={0}; sscanf("123456","%s",str); printf("str=%s",str); 2.取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。以下是引用片段: sscanf("123456","%4s",str); printf("str=%s",str); 3.取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。以下是引用片段: sscanf("123456abcdedf","%[^]",str); printf("
21、str=%s",str); 4.取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。以下是引用片段: sscanf("123456abcdedfBCDEF","%[1-9a-z]",str); printf("str=%s",str); 5.取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。以下是引用片段: sscanf("123456abcdedfBCDEF","%[^A-Z]",str); printf("str=%s",str);搜集一些特殊用法: %[]的用法:%[]表示要读入一
22、个字符集合,如果[后面第一个字符是”^”,则表示反意思。 []内的字符串可以是1或更多字符组成。空字符集(%[])是违反规定的,可 导致不可预知的结果。%[^]也是违反规定的。 %[a-z]读取在a-z之间的字符串,如果不在此之前则停止,如 chars[]="hello,myfriend”;//注意:,逗号在不a-z之间 sscanf(s,“%[a-z]”,string);//string=
23、hello%[^a-z]读取不在a-z之间的字符串,如果碰到a-z之间的字符则停止,如 chars[]="HELLOkitty”;//注意:,逗号在不a-z之间