sscanf,sprintf,snprintf和stringstream用法

本文详细介绍了C++和C语言中用于字符串处理的四个关键函数:sscanf、sprintf、snprintf和stringstream。sscanf从字符串中提取格式化输入,sprintf将格式化的输出写入字符串,snprintf提供了一种更安全的防止溢出的方式,而stringstream则是一种更现代、更灵活的数据类型转换工具,避免了缓冲区溢出和格式化错误的风险。这些函数各有特点,适用于不同的字符串操作场景。
摘要由CSDN通过智能技术生成

sscanf,sprintf,snprintf和stringstream

1. sscanf

C 库函数,int sscanf(const char *str, const char *format, …) 从字符串读取格式化输入。如果成功,该函数返回成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。和scanf的区别是scanf是以键盘作为输入源,sscanf是以字符串作为输入源。

  • str:这是c字符串,是函数检索数据的源
  • format:这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符。format 说明符形式为[=%[*][width][modifiers]type=]
  • 附加参数:这个函数接受一系列的指针作为附加参数,每一个指针都指向一个对象,对象类型由 format 字符串中相应的 % 标签指定,参数与 % 标签的顺序相同。参数前面要加&。

format中,*是可选的,表示数据是从流 stream 中读取的,但是可以被忽视,跳过此数据不读入,即它不存储在对应的参数中;width表示读取的最大字符数,modifiers表示参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size;type指定了要被读取的数据类型以及数据读取方式,可以是c(单个字符char*),d(十进制整数int*),eEfgG(如-732.103 和 7.12e4 float*),o(八进制整数),s(字符串),u(无符号十进制整数),xX(十六进制整数)。
同时支持集合操作:
%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
%[aB’] 匹配a、B、'中一员,遇见非其中的字符就停止,贪婪性
%[^a] 匹配非集合a中的任意字符,遇到a中的字符就停止,贪婪性
%[1-9,a-z] 范围链接,表示同时取1-9数字和a-z小写字母

总的来说,这个函数将参数str的字符串根据参数format字符串来转换并格式化数据,转换后的结果存于对应的参数内,有以下几种功能:
(1)根据格式从字符串中提取数据。如从字符串中取出整数、浮点数和字符串等。
(2)取指定长度的字符串
(3)取到指定字符为止的字符串
(4)取仅包含指定字符集的字符串
(5)取到指定字符集为止的字符串
几个常用的例子:

int year, month, day, hour, minute, second;
sscanf("2013/02/13 14:55:34","%d/%d/%d %d:%d:%d",&year, &month, &day, &hour, &minute, &second);
printf("time=%d-%d-%d %d:%d:%d\n", year, month, day, hour, minute, second);
//time=2013-2-13 14:55:34

char buf[100];
sscanf("123456 ", "%4s", buf);
printf("%s\n", buf);
//1234

char str1[100]="abc def", str2[100], str3[100];
sscanf(str1,"%s%s",str2,str3);
printf("%s %s\n",str2,str3);
//abc def

char str[100];
sscanf("1234abcd","%*d%s"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值