文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>sscanf函数于scanf函数的区别

sscanf函数于scanf函数的区别

时间:2010-10-24  来源:whyliyi

    sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。sscanf可以实现更丰富的功能,最起眼的应该是类似于正则表达式的功能:
    第一个参数可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}  
    1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)   
    2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。   
    3、width表示读取宽度。   
    4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。   
    5、type :这就很多了,就是%s,%d之类。   6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值。

    同时,sscanf支持集合操作,
    %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
    %[aB'] 匹配a、B、'中一员,贪婪性
    %[^a] 匹配非a的任意字符,贪婪性
   
    1. 常见用法。   
    char buf[20] = ;   
    sscanf("abcd45", "%4s", buf);
    printf("%s\n", buf);   
结果为:abcd   

2. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。   
    sscanf("123abcd abcd1234", "%[^ ]", buf);   
    printf("%s\n", buf);   
    结果为:123456   
3. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。      
    sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf);   
    printf("%s\n", buf);   
    结果为:123456abcdedf   
4. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。    
    sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf);   
    printf("%s\n", buf);   
    结果为:123456abcdedf   
5、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中   
    sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf);  
   printf("%s\n", buf);   结果为:12DDWDFF   
6、给定一个字符串““hello, world”,仅保留world。(注意:“,”之后有一空格)   
    sscanf(“hello, world”, "%*s%s", buf);   
    printf("%s\n", buf);   
    结果为:world  
   %*s表示第一个匹配到的%s被过滤掉,即hello被过滤了   如果没有空格则结果为NULL。   sscanf的功能很类似于正则表达式, 但却没有正则表达式强大,所以如果对于比较复杂的字符串处理,建议使用正则表达式.
  
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载