您的位置:首页 > 其它

sscanf函数的高级用法

2013-11-15 13:37 211 查看
 sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。 

intsscanf(constchar*format[,argument]...); 

其中的format可以是一个或多个:{%[*][width][{h|l|I64|L}]type|''|'\t'|'\n'|非%符号}, 

注: 

1)、 * 亦可用于格式中,(即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入。 (也就是不把此数据读入参数中) 

2)、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。 

3)、width:宽度,一般可以忽略,用法如: 

    const charsourceStr[]="hello,world"; 

    charbuf[10]={0}; 

    sscanf(sourceStr,"%5s",buf);  //%5s,只取5个字符 

    cout<<buf<<endl; 

    结果为:hello 

4)、{h|I|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 表示满足该条件的被过滤掉, 

    不会向目标参数中写入值。如: 

    constcharsourceStr[]="hello,world"; 

    char buf[10]={0}; 

    sscanf(sourceStr,"%*s%s",buf); 

    //%*s表示第一个匹配到的%s被过滤掉,即hello被过滤了 

    cout<<buf<<endl; 

    结果为:world 

7)、支持集合操作: 

    %[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配) 

    %[aB'] 匹配a、B、'中一员,贪婪性 

    %[^a]  匹配非a的任意字符,贪婪性 

    和正则表达式很相似,而且仍然支持过滤,即可以有%*[a-z]。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息