You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

指针反向循环实现:如何每次移除最后字符输出字符串?

实现每次输出字符串并移除最后一个字符的解决方案

你的现有代码是让指针从字符串起始位置逐步后移,每次输出从当前指针开始的子串,所以效果是每次去掉开头的字符。要实现相反的效果(每次去掉末尾的字符),我们可以通过两种方式实现,下面分别给出方案和解释:

方案一:修改原字符串实现截断

这种方式通过调整字符串结束符'\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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:51:12