sscanf用法总结

#1. sscanf简介
从一个字符串中读进与指定格式相符的数据,注意和printf不同的是都用于输出,但printf以键盘为输入源,而sscanf以固定字符串为输出源。
函数原型int sscanf (const char *str,const char * format,........);
返回值:如果成功则返回参数数目,失败则返回0
调用格式
sscanf(源字符串,输入格式,被输入的参数)

#2. 具体用法
1)取指定长度的字符串

    string = "123456789";
    sscanf(string, "%5s", buf1);
    printf("1.buf1=%s\n\n", buf1); //1.buf1=12345
   (buff1为char[255])

2)取到指定字符为止的字符串

string = "123/456";
sscanf(string, "%[^/]", buf1);
printf("3.buf1=%s\n\n", buf1);//3.buf1=123

3)取到指定字符集为止的字符串

string = "123abcABC";
sscanf(string, "%[^A-Z]", buf1);
printf("4.buf1=%s\n\n", buf1);//4.buf1=123abc

4)取仅包含指定字符集的字符串

string = "0123abcABC";
sscanf(string, "%[0-9]%[a-z]%[A-Z]", buf1, buf2, buf3);
printf("5.buf1=%s, buf2=%s, buf3=%s\n\n", buf1, buf2, buf3);
//5.buf1=0123,buf2=abc,buf3=ABC

5)获取指定字符中间的字符串
//注意:% * d 和 % s 加了星号 () 表示跳过此数据不读入. (也就是不把此数据读入参数中)

sscanf("12345acc","%*d%s",str);
printf("str = %s\n",str);//str=acc

// 给定一个字符串“abcd&hello¥why”,现在我想取出&与¥之间的字符串怎么办呢

sscanf("abcd&hello¥why", "%*[^&]&%[^¥]", str );

// [a-z]表示读取所有a-z的字符,[ ^a-z ]表示读取所有非小写字母的字符。那么在这里%*[ ^& ]表示先过滤掉abcd,然后以&隔开,后面还剩hello¥why,然后将¥之前非¥的字符提取到str中。

6)给定一个字符串“what, time”,如果我想仅保留time,那该怎么办呢?(,后面有个空格)

sscanf(“what, time”, "%*s%s", str );

//其中%*s表示第一个被匹配到的字符串what,被过滤掉了,如果没有空格,则结果为NULL。其实“what, time”被空格分割成了两个字符串"what,“和"time”.

7)取整数
例1

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("\ntime = %d-%d-%d %d:%d:%d\n",year,month,day,hour,minute,second);
//time=2023/02/13 14:55:34
例2
string = "china beijing 123";
ret = sscanf(string, "%s %s %d", buf1, buf2, &digit);
printf("1.ret=%d, buf1=%s, buf2=%s, digit=%d\n\n", ret, buf1, buf2, digit);
//1.ret=3,buf1=china,buf2=beijing,digit=123

Note:
1,sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
2,关于正则表达式:
(1)%[…],当字符属于方括号里表达式表示的字符集时继续读取,否则停止.方括号里的和正则表达式差不多,^是"排除…"的意思
(2)%*[…],直接跳过方括号里的字符集并继续读取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值