字符串格式化

字符串格式化

1 sprintf

#include <stdio.h>
int sprintf(char *str, const char *format, ...);
/*
功能:
     根据参数format字符串来转换并格式化数据,然后将结果输出到str指定的空间中,直到    出现字符串结束符 '\0'  为止。
参数: 
	str:字符串首地址
	format:字符串格式,用法和printf()一样
返回值:
	成功:实际格式化的字符个数
	失败: - 1
*/

例子

#include <stdio.h>

int main()
{
    char buf[1024] = {0};

    sprintf(&buf[0], "你好,今年我%d岁!", 18);

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

    return 0;
}


2 sscanf

#include <stdio.h>
int sscanf(const char *str, const char *format, ...);
/*
功能:
    从str指定的字符串读取数据,并根据参数format字符串来转换并格式化数据。
参数:
	str:指定的字符串首地址
	format:字符串格式,用法和scanf()一样
返回值:
	成功:成功则返回参数数目,失败则返回-1
	失败: - 1
*/
格式作用
%*s或%*d跳过数据
%[width]s读指定宽度的数据
%[a-z]匹配a到z中任意字符(尽可能多的匹配)
%[aBc]匹配a、B、c中一员,贪婪性
%[^a]匹配非a的任意字符,贪婪性
%[^a-z]表示读取除a-z以外的所有字符

例子

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

int main()
{
    char buf[100] = "12345abcde";
    char data[1024] = {0};

                                                // 跳过前面的数字
    sscanf(buf, "%*d%s", data);                 // 匹配第一个字符是否是数字,如果是,则跳过; 如果不是则停止匹配
    printf("%s\n", data);

    memset(data, 0, sizeof(data));
    sscanf(buf, "%3s", data);                   // 读取指定宽度数据
    printf("%s\n", data);

    memset(data, 0, sizeof(data));
    sscanf("abcadae1234", "%[a-c]", data);      // 匹配a-c中任意字符读取
    printf("%s\n", data);

    memset(data, 0, sizeof(data));
    sscanf("aBcaAb12", "%[aBc]", data);         // 匹配aBc中任意一个
    printf("%s\n", data);

    memset(data, 0, sizeof(data));
    sscanf("bBa12", "%[^aB]", data);            // 匹配非aB中任意一个
    printf("%s\n", data);


    memset(data, 0, sizeof(data));
    sscanf("123Aabc", "%[^a-z]", data);         // 匹配a-z以外的所有字符
    printf("%s\n", data);

    return 0;
}

// 将已给定字符串helloworld@baidu.com,实现输出helloworld和baidu.com
#include <stdio.h>

int main()
{
    char buf[100] = "helloworld@baidu.com";

    char data1[100] = {0};
    char data2[100] = {0};

    sscanf(buf, "%[a-z]%*[@]%s", data1, data2);
        
    printf("%s\n", data1);
    printf("%s\n", data2);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值