sscanf的使用

将已知的字符串通过格式化匹配出有效信息

1、%*s或%*d 跳过数据
2、%[width]s 读指定宽度的数据
3、%[a-z] 匹配a到z中任意字符(尽可能多的匹配)
4、%[aBc] 匹配a、B、c中一员,贪婪性
5、%[^a] 匹配非a的任意字符,贪婪性
6、%[^a-z] 表示读取除a-z以外的所有字符

测试源码

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


//1、%*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);

}


//2、%[width]s	读指定宽度的数据
void test03()
{
	char * str = "12345abcde";

	char buf[1024] = { 0 };

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

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

}

//3、%[a-z]	匹配a到z中任意字符(尽可能多的匹配)
void test04()
{
	char * str = "12345abcde";

	char buf[1024] = { 0 };

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


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

//4、 %[aBc]	匹配a、B、c中一员,贪婪性
void test05()
{
	char * str = "aabcde12345";

	char buf[1024] = { 0 };

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

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

//5、%[^a] 	匹配非a的任意字符,贪婪性
void test06()
{
	char * str = "abcde12345";

	char buf[1024] = { 0 };

	sscanf(str, "%[^c]", buf);

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

//6、%[^a-z]	表示读取除a-z以外的所有字符
void test07()
{
	char * str = "abcde12345";

	char buf[1024] = { 0 };

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

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


//7、截取ip
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);
}



int main(){

	puts("test01 start .......................................................");
	test01();
	puts("test01 end   .......................................................");
	puts ("\n");

	puts("test02 start .......................................................");
	test02();
	puts("test02 end   .......................................................");
	puts("\n");

	puts("test03 start .......................................................");
	test03();
	puts("test03 end   .......................................................");
	puts("\n");

	puts("test04 start .......................................................");
	test04();
	puts("test04 end   .......................................................");
	puts("\n");

	puts("test05 start .......................................................");
	test05();
	puts("test05 end   .......................................................");
	puts("\n");

	puts("test06 start .......................................................");
	test06();
	puts("test06 end   .......................................................");
	puts("\n");

	puts("test07 start .......................................................");
	test07();
	puts("test07 end   .......................................................");
	puts("\n");

	puts("test08 start .......................................................");
	test08();
	puts("test08 end   .......................................................");
	puts("\n");




	system("pause");
	return EXIT_SUCCESS;
}

测试结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值