c标准库(STL)系列-sscanf()

stdio.h头文件下
原型: int sscanf (const char *str,const char * format,…);
format – 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符。
format 说明符形式为

[=%[*][width][modifiers]type=]

具体参见后面的用法例子

int sscanf(str, “%d”,&n) 也可以哦,思路及用法自己扩展

作用:

sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。 成功则返回参数数目,失败则返回0。
将str中的内容以%d形式写入n中
从字符串读取格式化输入。
从一个字符串中读进与指定格式相符的数据
.。。。。。。

返回值类型

int

针对检索数据的 format 字符串中的每个 format 说明符,应指定一个附加参数。如果您想要把 sscanf 操作的结果存储在一个普通的变量中,您应该在标识符前放置引用运算符(&),例如:

int n;
sscanf (str,"%d",&amp);

注意:sscanf与scanf类似,都是用于输入的,只是后者以键盘(stdin)为输入源,前者以固定字符串为输入源。
与scanf的区别:scnaf只是将str换为由屏幕输入

#用法

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main(){
    char str[100];
    //用法一:取指定长度的字符串
    sscanf("12345","%4s",str);
    printf("用法一
str = %s
",str);

    //用法二:格式化时间
    int year,month,day,hour,minute,second;
    sscanf("2013/02/13 14:55:34","%d/%d/%d %d:%d:%d",&year,&month,&day,&hour,&minute,&second);
    printf("用法二
time = %d-%d-%d %d:%d:%d
",year,month,day,hour,minute,second);

    //用法三:读入字符串
    sscanf("12345","%s",str);
    printf("用法三
str = %s
",str);

    //用法四:%*d 和 %*s 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
    sscanf("12345acc","%*d%s",str);
    printf("用法四
str = %s
",str);

    //用法五:取到指定字符为止的字符串。如在下例中,取遇到'+'为止字符串。
    sscanf("12345+acc","%[^+]",str);
    printf("用法五
str = %s
",str);

    //用法六:取到指定字符集为止的字符串。如在下例中,取遇到小写字母为止的字符串。
    sscanf("12345+acc121","%[^a-z]",str);
    printf("用法六
str = %s
",str);
    return 0;
}
1. 常见用法。
1
2
3
charbuf[512];
sscanf("123456","%s",buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!
printf("%s
",buf);
结果为:123456
2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
1
2
sscanf("123456","%4s",buf);
printf("%s
",buf);
结果为:1234
3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
1
2
sscanf("123456abcdedf","%[^]",buf);
printf("%s
",buf);
结果为:123456
4. 取仅包含指定字符集的字符串。如在下例中,取仅包含19和小写字母的字符串。
1
2
sscanf("123456abcdedfBCDEF","%[1-9a-z]",buf);
printf("%s
",buf);
结果为:123456abcdedf
当输入:  sscanf("123456abcdedfBCDEF","%[1-9A-Z]",buf);
1
printf("%s
",buf);
结果为:123456BCDEF
5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
1
2
sscanf("123456abcdedfBCDEF","%[^A-Z]",buf);
printf("%s
",buf);
结果为:123456abcdedf
6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,
先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中
1
2
sscanf("iios/12DDWDFF@122","%*[^/]/%[^@]",buf);
printf("%s
",buf);
结果为:12DDWDFF
7、给定一个字符串“hello, world”,仅保留world。
(注意:“,”之后有一空格,%s遇空格停止,加*则是忽略第一个读到的字符串)
1
2
sscanf(“hello,world”,"%*s%s",buf);
printf("%s
",buf);
结果为:world
%*s表示第一个匹配到的%s被过滤掉,即“hello,”被过滤了
如果没有空格则结果为NULL
原文地址:https://www.cnblogs.com/AmosAlbert/p/12832260.html