sscanf的用法和详解——知识点4

sscanf 和scanf类似,都是用于输入的,不同的是,scanf是以键盘(stdin)为输入源,sscanf是以固定的字符串为输入源

用这个来分析字符串比较爽。

(一)函数语法

Int sscanf( const char * buffer, const char * format, [argument] ...);

buffer:存储的数据

format:控制字符串

1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了 星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
3、width表示读取宽度。
4、{h | l | 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 表示满足该条件的被过滤掉,不会向目标参数中写入值
失败返回0 ,否则返回格式化的参数个数
7、如果读取的字符串,不是以空格来分隔的话,就可以使用%[]。

(二)源代码测试

nt ret = 0;

char *string;
char buf1[100] = {0};
char buf2[100] = {0};
char buf3[100] = {0};

int num;

string = "I am best 100";
ret = sscanf(string, "%s %s %s %d", buf1, buf2, buf3, &num);
printf("ret = %d,%s-%s-%s-%d\n",ret,buf1,buf2,buf3,num);


/* 2 取指定长度的字符串 */
string = "123456789";
sscanf(string, "%5s", buf1);
printf("2_buf1=%s\n", buf1);


/* 3 取到指定字符为止的字符串 */
string = "1234/456";
sscanf(string, "%[^/]", buf1);
printf("3_buf1=%s\n", buf1);


/*4 取到指定字符集为止的字符串 */
string = "aSDDbdjj123";
sscanf(string, "%[^1-3]", buf1);
printf("4_buf1=%s\n", buf1);


/* 5 取仅仅包含字符集的字符串 */
string = "0123abcABC";
sscanf(string, "%[0-9]%[a-z]%[A-Z]", buf1,buf2,buf3);
printf("5_buf1=%s,buf2= %s,buf3=%s\n", buf1,buf2,buf3);


/* 6 获取指定字符中间的字符串 */
string = "ios<android>wp7";
sscanf(string, "%*[^<]<%[^>]", buf1);
printf("6_buf1=%s\n", buf1);


/* 7 指定要跳过的字符串 */
string = "iosVSandroid";
sscanf(string, "%[a-z]VS%[a-z]", buf1,buf2);
printf("7_buf1=%s,buf2=%s\n", buf1,buf2);


/* 8 分割以某字符隔开的字符串 */
string = "android-iphone-wp7";
sscanf(string, "%[^-]-%[^-]-%[^-]", buf1, buf2,buf3);
printf("8_buf1=%s,buf2=%s,buf3=%s\n", buf1, buf2,buf3);


/* 9 提取邮箱地址 */
string = "Email:beijing@sina.com";
sscanf(string, "%[^:]:%[^@]@%s", buf1, buf2, buf3);
printf("9_buf1=%s,buf2=%s,buf3=%s\n", buf1, buf2, buf3);


/* 10 过滤掉不想截取或不需要的字符串
在%后面加*号,代表过滤这个字符串,不读取
*/
string = "andriod iphone wp7";
sscanf(string, "%s %*s %s", buf1, buf2);
printf("10_buf1=%s,buf2=%s\n", buf1, buf2);

参考博文:https://blog.csdn.net/gzshun/article/details/7081736

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值