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]。