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

发布于:2024-05-12 ⋅ 阅读:(104) ⋅ 点赞:(0)

#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;:返回程序执行成功的标志。

网站公告

今日签到

点亮在社区的每一天
去签到