c语言去除文本行中尾部空格、制表符和换行符,并删除空白行

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

#define MAX_LINE_LENGTH 1024

int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("Usage: %s <filename>\n", argv[0]);
        return 1;
    }

    FILE *file;
    char line[MAX_LINE_LENGTH];
    int len;

    if ((file = fopen(argv[1], "r")) == NULL) {
        printf("Error: Unable to open file '%s'\n", argv[1]);
        return 1;
    }

    // 逐行读取文件内容
    while (fgets(line, MAX_LINE_LENGTH, file) != NULL) {
        
        // 不断去除行尾空格、制表符和换行符
        len = strlen(line);
        while (len > 0 && (line[len - 1] == ' ' || line[len - 1] == '\t' || line[len - 1] == '\n' || line[len - 1] == '\r')) {
            line[len - 1] = '\0';
            len--;
        }

        // 输出非空行
        if (strlen(line) > 0) {
            printf("%s\n", line);
        }
    }

    fclose(file);
    return 0;
}
  • #include <stdio.h>:包含标准输入输出库,提供了文件操作和输入输出功能。
  • #include <stdlib.h>:包含标准库,提供了一些常用的函数和类型。
  • #include <string.h>:包含字符串操作相关的函数库。
  • #include <ctype.h>:包含字符处理函数库,用于字符分类和转换。
  • #define MAX_LINE_LENGTH 1024:定义了一个常量**MAX_LINE_LENGTH**,表示每行文本的最大长度为1024个字符。
  • int main(int argc, char *argv[]):程序的入口函数,接受命令行参数。
  • if (argc != 2):检查命令行参数数量是否正确,如果不是2个参数,打印使用说明并退出程序。
  • FILE *file;:声明了一个文件指针**file**,用于打开和操作文件。
  • char line[MAX_LINE_LENGTH];:声明了一个字符数组**line**,用于存储每行文件内容。
  • int len;:声明了一个整型变量**len**,用于记录每行文件内容的长度。
  • if ((file = fopen(argv[1], "r")) == NULL):打开命令行参数指定的文件,如果文件打开失败,则打印错误信息并退出程序。
  • while (fgets(line, MAX_LINE_LENGTH, file) != NULL):逐行读取文件内容到字符数组**line**中,直到文件结束。
  • len = strlen(line);:计算当前行的长度。
  • while (len > 0 && (line[len - 1] == ' ' || line[len - 1] == '\t' || line[len - 1] == '\n' || line[len - 1] == '\r')):不断循环,检查当前行末尾是否包含空格、制表符、换行符和回车符,如果是,则将其替换为字符串结束符**\0,并将len**减1。
  • if (strlen(line) > 0):判断处理后的行是否为空行。
  • printf("%s\n", line);:输出处理后的行到标准输出,并添加换行符。
  • fclose(file);:关闭文件,释放资源。
  • return 0;:返回程序执行成功的标志。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-31 01:32:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-31 01:32:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-31 01:32:05       82 阅读
  4. Python语言-面向对象

    2024-03-31 01:32:05       91 阅读

热门阅读

  1. C++:右值引用 && 和移动赋值std::move分析

    2024-03-31 01:32:05       40 阅读
  2. ResutBuilder 学习笔记二:增加新的输入数据类型

    2024-03-31 01:32:05       45 阅读
  3. 每日一题 --- 四数相加 II[力扣][Go]

    2024-03-31 01:32:05       44 阅读
  4. 什么是ac

    2024-03-31 01:32:05       37 阅读
  5. kubernetes(K8S)学习(八):K8S之常见部署方案

    2024-03-31 01:32:05       45 阅读
  6. PreparedStatement对象

    2024-03-31 01:32:05       32 阅读
  7. Acwing 1238.日志统计 双指针

    2024-03-31 01:32:05       38 阅读