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

如何修正代码实现句子单词顺序反转而非字符反转?

修正反转句子单词顺序的函数问题

你当前的revSent函数是直接反转整个字符串的所有字符,所以会把每个单词内部的字符也倒过来。要实现仅反转单词顺序、保留单词本身字符顺序的需求,得用分两步的思路:

实现步骤

  • 第一步:反转整个字符串的所有字符
  • 第二步:遍历字符串,把每个独立单词的字符再反转回来

原问题代码

void revSent(char str[]) {
    int i;
    int n = strlen(str);
    char letter;

    for (i = 0; i < n / 2; i++) {
        letter = str[i];
        str[i] = str[strlen(str) - i - 1];

        str[strlen(str) - i - 1]=letter ;
    
    }
}

修正后的代码

// 辅助函数:反转字符串中从start到end的字符
void reverse(char str[], int start, int end) {
    char temp;
    while (start < end) {
        temp = str[start];
        str[start] = str[end];
        str[end] = temp;
        start++;
        end--;
    }
}

void revSent(char str[]) {
    int n = strlen(str);
    // 第一步:反转整个字符串,先把单词顺序倒过来
    reverse(str, 0, n - 1);
    
    int start = 0;
    // 第二步:逐个反转每个单词,恢复单词内部的字符顺序
    for (int i = 0; i <= n; i++) {
        // 遇到空格或字符串结尾,就反转当前区间的单词
        if (str[i] == ' ' || str[i] == '\0') {
            reverse(str, start, i - 1);
            start = i + 1;
        }
    }
}

代码说明

  1. 新增的reverse辅助函数负责处理指定区间的字符反转,逻辑复用性更强
  2. 先反转整个字符串,让单词的整体顺序颠倒,但此时每个单词内部是反向的
  3. 再遍历字符串,遇到空格或结束符就触发当前单词的反转,把单词内部字符恢复成原顺序
  4. 最终就能得到「单词顺序反转、但每个单词本身字符不变」的目标效果

内容的提问来源于stack exchange,提问作者moran avtraham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:21:01