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

如何实现输入文本反转输出并按指定长度换行?

解决文本反转并按指定宽度换行的问题

首先分析你的原代码存在的核心问题:

  • 变量i未初始化,初始值为随机值,导致读取输入时写入input数组的错误位置,引发越界或逻辑混乱。
  • 使用scanf("%c")读取文本时,未处理scanf("%d")遗留的换行符,导致输入数组开头包含多余的空字符。
  • 反转逻辑完全错误,索引计算混乱(如mirror[k] = input[reset - k]),且输出时误用了数组索引i而非k。
  • 块索引更新逻辑(reset = (j * reset))错误,会导致数组越界。
  • 未处理文本长度不足指定行宽时的空格填充。

正确实现思路(匹配示例输出)

根据你的示例,需求是:将原文本按指定行宽从后往前分块,每个块反转后右对齐(不足行宽时前面补空格),按顺序输出。以下是实现代码:

#include <stdio.h>
#include <string.h>

int main() {
    char input[121];
    int line_width, len, rows, i, j;

    // 读取行宽并清除缓冲区换行
    printf("Enter the length of the output line: ");
    scanf("%d", &line_width);
    getchar();

    // 读取输入文本直到EOF
    printf("Enter your text (control-d to exit): ");
    len = 0;
    while ((input[len] = getchar()) != EOF && len < 120) {
        len++;
    }
    input[len] = '\0';

    // 计算总行数(向上取整)
    rows = (len + line_width - 1) / line_width;
    printf("output:\n");

    for (i = 0; i < rows; i++) {
        // 计算当前块的起始和结束索引
        int block_start = len - (i + 1) * line_width;
        int block_end = len - i * line_width;

        // 输出前面的填充空格
        for (j = 0; j < (block_start < 0 ? -block_start : 0); j++) {
            printf(" ");
        }

        // 输出反转后的块内容
        int start_idx = block_start > 0 ? block_start : 0;
        for (j = block_end - 1; j >= start_idx; j--) {
            printf("%c", input[j]);
        }
        printf("\n");
    }

    // 输出位置标记
    for (i = 1; i <= line_width; i++) {
        printf("%d", i);
    }
    printf("\n");

    return 0;
}

代码说明

  1. 输入处理:用getchar()清除scanf("%d")后的换行符,避免干扰文本读取;逐字符读取文本直到EOF,确保完整获取输入。
  2. 行数计算:通过(len + line_width - 1) / line_width实现向上取整,得到需要的总行数。
  3. 逐行输出:
    • 从原文本末尾往前划分块,确保输出顺序匹配示例。
    • 若块起始索引为负,说明当前块长度不足行宽,输出对应数量的填充空格。
    • 反向遍历当前块的字符,实现块内反转并输出。

测试验证

输入示例中的内容:

Enter the length of the output line: 5
Enter your text (control-d to exit): Hello there

输出将与示例完全一致:

output:
olleH
 ereh
    t
12345

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:20:57