C语言从文件中提取连续数字正整数

本文介绍如何使用C语言从文件中提取连续数字组成的正整数,并进行过滤处理,最终输出到另一个文件。

问题描述:

假设有一个文件trans.in,其中包含数字、非数字字符和空格。需要从该文件中提取所有连续数字组成的正整数,并过滤掉连续数字最高位的0,最终将结果输出到另一个文件trans.out

示例:

假设trans.in文件内容如下:

df-23adfd56 2343?23dgjop00535

trans.out文件内容应为:

23 56 2343 23 535

代码实现:

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

int main() {
    FILE *fp_in, *fp_out;
    char ch;
    int num = 0, flag = 0; // flag用于标记是否正在读取数字

    fp_in = fopen("trans.in", "r");
    fp_out = fopen("trans.out", "w");

    if (fp_in == NULL || fp_out == NULL) {
        printf("File open error!\n");
        return 0;
    }

    while ((ch = fgetc(fp_in)) != EOF) {
        if (isdigit(ch)) {
            if (num == 0 && ch == '0') {
                // 过滤掉连续数字最高位的0
                continue;
            }
            num = num * 10 + ch - '0';
            flag = 1;
        } else {
            if (flag) {
                // 输出当前读取到的数字
                fprintf(fp_out, "%d ", num);
                num = 0;
                flag = 0;
            }
        }
    }

    if (flag) {
        // 处理最后一个数字
        fprintf(fp_out, "%d", num);
    }

    fprintf(fp_out, "\n"); // 最后要输出一个回车符

    fclose(fp_in);
    fclose(fp_out);

    return 0;
}

代码解析:

  1. 文件打开:使用fopen()函数打开输入文件trans.in和输出文件trans.out
  2. 循环读取字符:使用fgetc()函数逐个读取trans.in文件中的字符。
  3. 判断数字:使用isdigit()函数判断当前字符是否为数字字符。
  4. 过滤最高位为0的数字:如果当前数字为0且num为0,则跳过该字符,避免输出前导0。
  5. 拼接数字:如果当前字符为数字,则将该数字添加到num中,并设置flag为1,表示正在读取数字。
  6. 输出数字:如果当前字符为非数字字符且flag为1,则表示读取到一个完整的数字,将其输出到trans.out文件中,并重置numflag
  7. 处理最后一个数字:循环结束时,如果flag为1,则表示最后一个字符是数字,需要将该数字输出到trans.out文件中。
  8. 输出回车符:最后在trans.out文件中输出一个回车符。
  9. 关闭文件:使用fclose()函数关闭输入文件和输出文件。

总结:

该代码实现了从文件中提取连续数字组成的正整数的功能,并成功地过滤掉了连续数字最高位的0。希望本文能够帮助您理解代码的原理和实现过程。


原文地址: http://www.cveoy.top/t/topic/gl8K 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录