C语言提取文件中的连续数字正整数
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;
}
代码解析:
- 文件打开:使用
fopen()函数打开输入文件trans.in和输出文件trans.out。 - 循环读取字符:使用
fgetc()函数逐个读取trans.in文件中的字符。 - 判断数字:使用
isdigit()函数判断当前字符是否为数字字符。 - 过滤最高位为0的数字:如果当前数字为0且
num为0,则跳过该字符,避免输出前导0。 - 拼接数字:如果当前字符为数字,则将该数字添加到
num中,并设置flag为1,表示正在读取数字。 - 输出数字:如果当前字符为非数字字符且
flag为1,则表示读取到一个完整的数字,将其输出到trans.out文件中,并重置num和flag。 - 处理最后一个数字:循环结束时,如果
flag为1,则表示最后一个字符是数字,需要将该数字输出到trans.out文件中。 - 输出回车符:最后在
trans.out文件中输出一个回车符。 - 关闭文件:使用
fclose()函数关闭输入文件和输出文件。
总结:
该代码实现了从文件中提取连续数字组成的正整数的功能,并成功地过滤掉了连续数字最高位的0。希望本文能够帮助您理解代码的原理和实现过程。
原文地址: http://www.cveoy.top/t/topic/gl8K 著作权归作者所有。请勿转载和采集!