c - C中的字符串缩写字符序列
问题描述
我需要编写一个函数,它接受像“abcdef”这样的字符串并将其转换为“af”,或将“589”转换为“5-9”,我可以使用 stdio.h 和 string.h 中的哪些函数?
解决方案
您需要找到运行的开始和结束。如果您将每个字符都视为运行的一部分,则更容易,因此您的运行长度可能为 1 或更长。
当你发现跑步结束时,你需要根据跑步的长度做不同的事情。
- 运行长度 = 1:打印运行的唯一字符。
- 运行长度 = 2:打印运行的两个字符。
- 运行长度 = 3:打印运行的第一个和最后一个字符,中间有破折号。
考虑到这一点,我们可以使用以下算法:
- 创建一个指向字符串第一个字符的指针。
- 虽然指出的字符不是 NUL,
- 打印指出的字符。
- 将运行的长度设置为 0。
- 环形,
- 保存指向的字符。
- 增加指针。
- 增加运行的长度。
- 如果指向的字符为 NUL,
- 休息。
- 如果指向的字符不比保存的字符多一个,
- 休息。
- 如果运行的长度是 2+,
- 如果运行的长度为 3+,
- 打印破折号。
- 打印保存的字符。
- 如果运行的长度为 3+,
- 打印换行符。
您应该在纸上运行上述算法,并将其"4abcz35xy"
作为输入。当你这样做时,跟踪变量的当前值(指针、运行长度和保存的字符)。
+---+---+---+---+---+---+---+---+---+---+---+
|'4'|'a'|'b'|'c'|'z'|'3'|'4'|'5'|'x'|'y'| 0 |
+---+---+---+---+---+---+---+---+---+---+---+
^
Pointer |
+-------+ |
| -----+
+-------+
Run length
+-------+
| |
+-------+
Saved character
+-------+
| |
+-------+
推荐阅读
- sql - 我可以将备份文件从 SQL Server 2008 恢复到 SQL Server Express 版本吗?
- javascript - 无法对数组进行排序
- bash - 如果函数内部的条件失败,则跳过 bash while 循环
- .net - 如何练习大型 SQL Server 索引或分区问题进行面试?
- java - JavaFX:组合框双向排除
- laravel - 错误:添加数据时“请求失败,状态码为 500”
- android - Android Studio 事件日志中的时间不正确
- node.js - Node.js HTTP 服务器子进程不会在 Node.js 中被杀死
- angular - 角度测试错误 - 无法绑定到“项目”,因为它不是“应用下拉菜单”的已知属性
- email - Ansible:如何使用来自远程主机的文件发送附件