sscanf原型
int sscanf( string str, string fmt, mixed var1, mixed var2 ... );其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | ' ' | ' ' | 非%符号}
【解释】这句话意思是指,除了%...type之外,还有三个可选的空白字符和非%符号,比如:
sscanf(str,"%d%ssscanf(str,"%d %s",..);sscanf(str,"%d
%s",...);sscanf(str,"%d,%s",...);//逗号隔开
1或2或3都可以任意重复(在这里将三个空白字符认为是一个类型)。
%*号*号表示(比如%*d和%*s表示跳过此数据不读入)
char str[]="123apple";sscanf(str,"%*d%s",buf);printf("%s
",buf);//apple
特别地,可以忽略一个字符。比如有时读取换行时还剩有一个' '
scanf("%[^
]%*c",...);
%[]扫描字符集合
基本使用%[abc]:表示匹配括号中的任意字符,直到遇到非括号内字符为止。
char str[]="abcbc2600";sscanf(str,"%[abc]",buf);//abcbc
除了基本使用外,还支持范围。
支持集合操作:%[a-z]:表示匹配a到z中任意字符(尽可能多的匹配)%[^a]:匹配非a的任意字符(前面的例子有使用,比如%[^ ],匹配直到遇到' '为止)
和*进行组合:%*[a-z]:匹配尽可能多的a-z范围中的字符,并过滤掉。
char str[]="123456789apple";sscanf(str,"%*[0-5]%s",buf);printf("%s
",buf);//6789apple
一个综合例子:
char str[]="123/bob@2600";sscanf(str,"%*[^/]/%[^@]",buf);//bob
|或运算
比如,匹配[a-c]或[0-5]中的任意字符
char str[]="abcbc2600";sscanf(str,"%[a-c|2-5]",buf);printf("%s
",buf);//abcbc2
可以看到|是作为模式来应用的,假如我们就需要通过|切分串怎么办呢?
char buf[32];int n;char str[]="abc|2600";sscanf(str,"%[^\|]|%d",buf,&n);printf("%s,%d
",buf,n);//abc,2600
结语
sscanf(scanf)的用法形式比较多,这里列举了一部分常用的用法
本文发布于:2023-02-28 20:14:00,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/167766518879707.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:scanf(scanf(\"%s\",a)和scanf(\"%s\",&a)).doc
本文 PDF 下载地址:scanf(scanf(\"%s\",a)和scanf(\"%s\",&a)).pdf
留言与评论(共有 0 条评论) |