C语言sscanf函数使用总结

本文详细介绍sscanf函数的用法及其在字符串处理中的应用场景,包括基本格式转换、指定长度字符串提取、数字转换等,并通过多个示例展示了其强大的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看算法的入门紫皮书时,看到了sscanf函数。这个函数在有关字符串的处理题中用起来还是挺好用的。在此,总结一下用法。


函数定义

int sscanf (const char *str,const char * format,........); 

函数说明

sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。

返回值

成功则返回参数数目,失败则返回-1,错误原因存于errno中。

代码示例

这个函数的使用方法很简单,举几个代码示例就明白了。sscanf的功能强大在于支持扫描集的使用,即%[]。
用起来跟正则表达式差不多。有的扫描集的使用在这里就不详细介绍了,感兴趣的可以搜一下scanf扫描集的使用。

sscanf用法跟scanf差不多,只不过scanf是从标准输入stdin中读入,而sscanf函数是从指定的字符串中读取。相比scanf函数,sscanf函数多了第一个参数,传入一个字符串。

用法1:
//拷贝字符串

#include<stdio.h>


int main()
{
    char str[100];

    sscanf("123456","%s",str);
    puts(str);

    return 0;
}

运行结果

123456

用法2:
//取指定长度的字符串

#include<stdio.h>


int main()
{
    char str[100];

    sscanf("123456","%3s",str);
    puts(str);

    return 0;
}

运行结果

123

用法3:
//将表示数字的字符串转换成整型变量

#include<stdio.h>


int main()
{
    //char str[100];
    int res;
    sscanf("123456","%d",&res);
   // puts(str);
    printf("%d\n",res);

    return 0;
}

运行结果

123456

用法4:
//取到指定字符为止的字符串。

#include<stdio.h>

//取遇到空格为止字符串
int main()
{
    char str[100];
    sscanf("fengxin blog","%[^ ]",str);
    puts(str);

    return 0;
}

运行结果

fengxin


#include<stdio.h>

//取遇到'/'为止的字符串
int main()
{
    char str[100];
    sscanf("fengxin/blog","%[^/]",str);
    puts(str);

    return 0;
}

运行结果

fengxin

用法5:
//取仅包含指定字符集的字符串

#include<stdio.h>

//只取数字和小写字母
int main()
{
    char str[100];
    sscanf("123456fengxinBLOG","%[1-9a-z]",str);
    puts(str);

    return 0;
}

运行结果

123456fengxin

用法6:
//取需要的字符串

#include<stdio.h>


int main()
{
    //char str[100];

    int year,month,day;
    sscanf("2017.12.5","%d.%d.%d",&year,&month,&day);
    printf("year:%d,month:%d,day:%d\n",year,month,day);

    return 0;
}

运行结果:

year:2017,month:12,day:5

用法7:
//%[]: 亦可用于格式中, (即 %d 和 %*s) 加了星号 () 表示跳过此数据不读入. (也就是不把此数据读入参数中)

#include<stdio.h>


int main()
{
    char str[100];

    sscanf("fengxin blog","%*s%s",str);
    puts(str);

    return 0;
}

运行结果:

blog


//给定一个字符串blog/fengxinlinux@123,获取 / 和 @ 之间的字符串,先将 “blog/”过滤掉,再将非’@’的一串内容送到str中

#include<stdio.h>


int main()
{
    char str[100];

    sscanf("blog/fengxinlinux@123","%*[^/]/%[^@]",str);
    puts(str);

    return 0;
}

运行结果

fengxinlinux

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值