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

如何实现类似cat -s命令将连续空行合并为单个空行的功能

实现方法

要达到和cat -s命令完全一致的连续多空行合并为单个空行的效果,不需要复杂的行缓存,只需要加一个状态位跟踪连续空行状态即可,逻辑非常轻量:

  • 定义一个标记位记录当前是否已经输出过连续空行段的换行,初始状态为未输出
  • 逐字符遍历文件内容:
    • 读到非换行字符时,说明当前行不是空行,清空空行标记,直接输出字符
    • 读到换行符时,如果还没输出过当前空行段的换行,就输出这个换行并打上标记;如果已经打过标记,说明这是连续多余空行的换行,直接跳过不输出
  • 额外补充原代码缺失的文件打开失败判断,避免空指针触发崩溃
完整修改后代码
#include <stdio.h>
#include <stdlib.h>

int main() {
    int c;
    // 空行状态标记:0=当前未处于待跳过的连续空行段,1=已输出过当前空行段的换行
    int in_blank = 0;

    FILE *file = fopen("2.txt", "r");
    if (file == NULL) {
        perror("打开文件失败");
        return EXIT_FAILURE;
    }

    while ((c = getc(file)) != EOF) {
        if (c != '\n') {
            in_blank = 0;
            putc(c, stdout);
        } else {
            if (!in_blank) {
                in_blank = 1;
                putc(c, stdout);
            }
        }
    }

    fclose(file);
    return 0;
}
效果说明
  • 无连续空行的普通文本输出和原文件完全一致
  • 文件开头、段落之间的任意数量连续空行都会被压缩为单个空行
  • 逐字符处理的逻辑内存占用恒定,不受文件大小影响,行为和原生cat -s完全对齐

内容的提问来源于stack exchange,提问作者Марифат Гадиров

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:01:07