sscanf()函数详解(c语言)

前言

今天在家里做acm的时候,用到了sscanf()函数,感觉特别犀利,这里记录一下用法。

sscanf()

函数原型

int sscanf(const char *str, const char *format, mixed var1, mixed var2);

说明:sscanf()会将参数str的字符串根据参数format来转换并格式化数据。

format格式

{%[*] [width][{h | l | l64 | L}]type | ' ' | t' | '\n' | 非%符号}

注:
  1. *可用于格式中,(即%*d和%*s)加了星号(*)表示跳过此数据不读入。(也就是不把数据读入到参数中)
  2. width表示读取宽度
  3. {h | l | l64 | L}:参数size,通常h表示单字节size,l表示2字节size,L表示4字节size,l64表示8字节size
  4. type参数类型,例如%s,%d
  5. 支持正则表达式,例如%[a-z]匹配a到z中任意字符(ps:正则表达式这个假期我会写一篇博客记录)

参考用例

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


int main()
{
	int result;
	char str[100];
	char buf1[255], buf2[255], buf3[255], buf4[255];
	
	//基本用法
	memset(str, 0, sizeof(str));
	strcpy(str, "i love china!");
	result = sscanf(str, "%s %s %s", buf1, buf2, buf3);
	printf("%d\n%s\n%s\n%s\n", result, buf1, buf2, buf3);
	/**
	 * 执行结果:
	 * 3
	 * i
	 * love
	 * china!
	 * 可以看出,sscanf的返回值为读取的参数个数 
	 */

	//读取指定长度的字符串
	memset(str, 0, sizeof(str));
	strcpy(str, "abcdefghijklmnopq");
	sscanf(str, "%5s", buf4);
	printf("%s\n", buf4);
	/**
	 * 执行结果:
	 * abcde
	 */

	//正则匹配字符串
	memset(str, 0, sizeof(str));
	memset(buf1, 0, sizeof(buf1));
	memset(buf2, 0, sizeof(buf2));
	memset(buf3, 0, sizeof(buf3));
	strcpy(str, "123456abcdedfANDFS");
	sscanf(str, "%[0-9]%[a-z]%[A-Z]", buf1, buf2, buf3);
	printf("%s\n%s\n%s\n", buf1, buf2, buf3);
	/**
	 * 执行结果:
	 * 123456
	 * abcdedf
	 * ANDFS
	 * 很难相信c语言竟然支持正则,不过c支持的正则挺弱的
	 */
	return 0;
}

参考链接



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值