指针反向循环实现:如何每次移除最后字符输出字符串?
实现每次输出字符串并移除最后一个字符的解决方案
你的现有代码是让指针从字符串起始位置逐步后移,每次输出从当前指针开始的子串,所以效果是每次去掉开头的字符。要实现相反的效果(每次去掉末尾的字符),我们可以通过两种方式实现,下面分别给出方案和解释:
方案一:修改原字符串实现截断
这种方式通过调整字符串结束符'\0'的位置来截断末尾字符,代码直观易懂:
#include <stdio.h> #include <string.h> // 需要用到strlen获取字符串长度 int main() { char str[128] = "Some Text"; int len = strlen(str); // 获取初始字符串的有效长度 // 从完整字符串开始,逐步截断最后一个字符 for (int i = len; i > 0; i--) { str[i] = '\0'; // 将当前最后一个字符替换为结束符,实现截断 printf(" value => %s \n ", str); } return 0; }
代码说明
- 引入
<string.h>是为了使用strlen()函数,它能快速返回字符串中'\0'之前的字符总数; - 循环从字符串初始长度
len开始,每次把str[i]设为'\0',相当于把字符串的结束位置往前挪一位,自然就去掉了最后一个字符; - 循环条件
i > 0保证我们会输出从完整字符串到只剩第一个字符的所有版本(i=0时字符串为空,无需输出)。
方案二:不修改原字符串的实现
如果原字符串后续还有用途,不想被修改,可以利用printf的格式控制来实现,完全不改动原字符串:
#include <stdio.h> #include <string.h> int main() { char str[128] = "Some Text"; int len = strlen(str); for (int i = 0; i < len; i++) { // %.*s 表示用后面的整数参数指定输出的字符个数 printf(" value => %.*s \n ", len - i, str); } return 0; }
代码说明
%.*s是printf的特殊格式控制:*代表精度由后续的整数参数决定,这里len - i就是每次要输出的字符数,从完整长度逐步递减,实现每次去掉最后一个字符的效果;- 整个过程中原字符串的内容完全没有被修改,适合需要保留原字符串的场景。
输出效果
两种方案的输出结果一致,都会得到:
value => Some Text value => Some Tex value => Some Te value => Some T value => Some value => Som value => So value => S
内容的提问来源于stack exchange,提问作者Piedmon
相关产品推荐
相关产品推荐

