假设我们现在正在开发一款文档管理类软件 。其中一项功能就是一次性创建多个名称连续的文件夹 , 如Icon1、 Icon2等等 。整个名称可以分作两部分 , 前半部分是常量字符串"Icon" , 后半部分是编号字符串 。在使用循环语句生成名称时 , 编号是数字 , 如果能将编号转换为一个字符串 , 那么我们就可以用strcat函数将两部分组合起来 , 然后使用mkdir创建文件夹即可 。因此 , 现阶段问题就变成了如何把数字转换为对应的字符 。
原始社会现在又到了查看ASCII码表的时候了 , 通过查表我们可以看到 , 字符'0' , 对应的ASCII码是48 , 也就是说数值48 , 转换为char类型就是字符'0' , 根据这个简单的对应关系 , 我们就可以生成名称了 。

文章插图

文章插图
我们输出编号从0-9的名称 , 整体效果还不错 。不过 , 我想你也看到局限性了 , 如果要生成编号大于10的名称 , 这个程序就像小孩数指头做算术一样 , 不够用了 。
二阶文明【C语言快速入门——字符串生成】在这一文明阶段的 , 我们的思考认知能力有了巨大的提升 , 我们希望能根据指定的一个区间生成对应的名称 , 如Icon17到Icon35 , 同时还希望前导名称能够指定 , 就像是Name999-Name1234一样 。同样 , 最关键的问题还是数值到字符串的转换 , 因为现在的数值范围更大了 , 需要的处理也就更多了 。让我们尝试编写一个函数去解决这个问题 。

文章插图
注释中【相当于num-=factory】有误

文章插图

文章插图
三阶文明:itoa现在我们进化到了三阶文明 , 在这一阶段 , 我们不再需要自己编写复杂的数值转换字符串函数了 。而是使用本阶文明提供的函数来完明 , 这个函数就是itoa , 它由stdlib.h提供 。
原型名:char*itoa( int value, char *string, int radix );
value是被转换的整数 , string是转换后储存的字符数组 , radix是转换进制数 , 如2,8,10,16进制 。

文章插图
终极文明想想看 , 如果我们仅仅是要输出符合要求的名称 , 那么使用 printf("Icon%d", 83); 之类的语句即可达到要求 。在这一文明阶段 , C语言运行时库进化出了格式化字符串函数sprintf 。
不同于printf将信息输出到屏幕(确切的说是标准输出) , sprintf将格式化后的字符串输出到对应的字符数组 , 一击达到目的 , 其相应的安全版本是sprintf_s 。同printf一样 , 可以使用格式化控制符 , 可以帮助我们生成补齐的文件夹名称 。在运行完这个程序后 , 转到对应的工程目录 , 你会发现Icon98 Icon99... 静静的躺在那儿 。

文章插图

文章插图
通过这节内容的学习 , 希望能帮助你更深刻的理解ASCII码表、更好的操作数组 , 熟悉C提供的字符串函数 。对于C语言字符串函数 , 建议你更多的使用其安全版本 。最后要说明的是 , 做为练习 , 你可以写一个数字转换为字符串的函数;做为开发 , 你可以先去查找语言提供的库是否包含有你需要的功能 , 有 , 就用它!
推荐阅读
- Go语言实现LeetCode算法:958 检查二叉树的完整性
- 手机上的视频照片,怎样快速存到U盘或电脑里?原来方法这么简单
- 快速解酒有哪些好方法
- Java入门的12个知识点总结
- 详解Redis慢查询功能--快速定位性能瓶颈
- 快速射电暴FRB121102
- 快速弄懂Java 11 中的NIO 2.0
- Go语言中优雅的处理错误,而不仅仅只是检查
- 路由策略入门
- 快速进行数据库管理的Mac软件
