sscanf的使用

  1. 将已知的字符串通过格式化匹配出有效信息
  2. 案例
    1. 字符串 char * str = “abcde#zhangtao@12345” 中间的zhangtao匹配出来
    2. 匹配char * ip = “127.0.0.1”将中间数字匹配到 num1 ~ num4中

%*s或%*d 跳过数据

void test01()
{
	char * str = "12345abcde";
	char buf[1024] = { 0 };
	sscanf(str, "%*d%s", buf);

	printf("%s\n", buf);
}

 

void test02()
{
	char * str = "abcde12345"; //在中间加空格或者\t都可以实现效果

	char buf[1024] = { 0 };

	//sscanf(str, "%*s%s", buf);

	sscanf(str, "%*[a-z]%s", buf);

	printf("%s\n", buf);

}

 

 %[width]s    读指定宽度的数据

void test03()
{
	char * str = "12345abcde";

	char buf[1024] = { 0 };

	sscanf(str, "%6s", buf);

	printf("%s\n", buf);

}

 

 %[a-z]    匹配a到z中任意字符(尽可能多的匹配)

void test04()
{
	char * str = "12345abcde";

	char buf[1024] = { 0 };

	sscanf(str, "%*d%[a-c]", buf);


	printf("%s\n", buf);
}

 

 

%[aBc]    匹配a、B、c中一员,贪婪性

void test05()
{
	char * str = "aabcde12345";

	char buf[1024] = { 0 };

	sscanf(str, "%[aBc]", buf); //在匹配过程中,只要有一个匹配失败,后续就不在进行匹配

	printf("%s\n", buf);
}

 

 %[^a-z]    表示读取除a-z以外的所有字符

void test07()
{
	char * str = "abcde12345";

	char buf[1024] = { 0 };

	sscanf(str, "%[^0-9]", buf);

	printf("%s\n", buf);
}

 案例1

void test08()
{
	char * ip = "127.0.0.1";

	int  num1 = 0;
	int  num2 = 0;
	int  num3 = 0;
	int  num4 = 0;

	sscanf(ip, "%d.%d.%d.%d", &num1, &num2, &num3, &num4);

	printf("%d\n", num1);
	printf("%d\n", num2);
	printf("%d\n", num3);
	printf("%d\n", num4);
}

void test09()
{
	char * str = "abcde#zhangtao@12345";

	char buf[1024] = { 0 };

	sscanf(str, " %*[^#]#%[^@] ", buf);

	printf("%s\n", buf);
}

 已给定字符串为: helloworld@itcast.cn,请编码实现helloworld输出和itcast.cn输出。

void test10()
{
	char * str = "helloworld@itcast.cn";

	char buf1[1024] = { 0 };
	char buf2[1024] = { 0 };

	sscanf(str, "%[a-z]%*[@]%s", buf1, buf2);

	printf("%s\n", buf1);
	printf("%s\n", buf2);
}
int main() {
	char *str = "helloworld@itcast.cn";

	char buf1[1024] = { 0 };
	char buf2[1024] = { 0 };

	//sscanf(str, "%10s", buf1);
	//sscanf(str, "%[a-z]", buf1);
    sscanf(str, "%[^@]", buf1);
	sscanf(str, "%*[^@]@%s", buf2);

	printf("buf1:%s\n", buf1);
	printf("buf2:%s\n", buf2);

	system("pause");
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值