格式化字符串操作函数

【1】格式化字符串操作函数

终端:printf;

字符:sprintf;

文件:fprintf;

id test_01()
{
    char arr[128]="";
    sprintf(arr,"%d",123);
    printf("%s\n",arr); //123
}
void test_01()
{
    int year = 2002;
    int month = 12;
    int day = 6;
    char arr[128]="";
    int len = sprintf(arr,"%d年%.2d月%.2d日",year,month,day); 
    printf("%s\n",arr);    //2002年12月06日
    printf("%d\n",len);    //17 返回的为字符串长度 (不包括'\0');
}

【2】sscanf 解包函数

终端:scnaf;

字符:sscnaf;

文件:fscnaf;

2.1 %s 和 sscanf 遇到空格回车结束提取

注意: %s 提取到的内容是字符串

void test_01()
{
    char arr1[128] = "";
    char arr2[] ="hello world";
    sscanf(arr2,"%s",arr1);
    printf("%s\n",arr1);
}

2.2 sscanf提取数值

当sscanf提取数值时 可使用:%d %ld %u %lu等 提取的都是数值(遇到非数值或结束符'\0'结束);

void test_01()
{
    char arr[128]="123hello456";
    int num;
    sscanf(arr,"%d",&num);
    printf("%d\n",num); //123
}

2.3 提取字符

当sscanf提取z字符时: %c 提取单个字符

void test_01()
{
    char arr[]="hello world";
    char ch;
    sscanf(arr,"%c",&ch);
    printf("%c\n",ch); //h
}

【3】sscanf 进阶

3.1提取指定个数的字符或数值 %4s %4d

void test_01()
{
    char arr1[]="helloworld";
    char arr2[128]="";
    sscanf(arr1,"%4s",arr2);
    printf("%s\n",arr2);    //hell
}

注意:hello后面补'\0' 注意非法访问

void test_01()
{
    char arr[]="12345hello456";
    int num;
    sscanf(arr,"%4d",&num);    //1234
    printf("%d\n",num);
}

注意:到达长度或遇到非数值 !(0~9) 都会停止

void test_01()
{
    char arr[]="123hello456";
    int num;
    sscanf(arr,"%4d",&num);  //123
    printf("%d\n",num);
}

3.2跳过字符串和数值

%*ns 跳过n个字符串

void test_01()
{
    char arr1[] = "hello world";
    char arr2[128] = "";
    sscanf(arr1,"%*6s%s",arr2);
    printf("%s\n",arr2);    //world
}

%*nd 跳过n个数值

void test_01()
{
    char arr[]="hello23456";
    int num;
    sscanf(arr,"%*5s%3d",&num);
    printf("%d\n",num); //234
}

3.3%[a-z] 匹配a-z中任意字符

遇到非a-z字符结束

void test_01()
{
    char arr1[]="abABCc";
    char arr2[128]="";
    sscanf(arr1,"%[a-z]",arr2);    
    printf("%s\n",arr2);    //ab
}

3.4%[aBc] 匹配aBc中的字符

void test_01()
{
    char arr1[]="abABCc";
    char arr2[128]="";
    sscanf(arr1,"%[aBc]",arr2); //a 
    printf("%s\n",arr2);
}

3.5%[^aBc] 匹配非aBc的任意字符

void test_01()
{
    char arr1[]="abABCc";
    char arr2[128]="";
    sscanf(arr1,"%[^ABC]",arr2); //ab 
    printf("%s\n",arr2);
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值