【问题描述】 写一程序将一个文件拷贝至另一个文件, 其中在所拷贝的文件中, 多个连续空格只拷贝一个空格, 制表符则用一个空格代替, 其它字符不变。该程序文件名由命令行参数输入。 【输入形式】 源文件名和目标文件名在执行时作为程序命令行参数输入,例如若程序名为copy, 源文件名和目标文件名分别为fcopy.in和fcopy.out,则命令行为:copy fcopy.in fcopy.out。 程序将从当前目录下读取fcopy.in文件。 【输出形式】 将fcopy.in文件内容拷贝至fcopy.out文件中。在所拷贝的文件中, 多个连续空格只拷贝一个空格 ,制表符则用一个空格代替, 其它字符不变。 【输入样例】 假如文件fcopy.in中内容如下: Alcatel provides end-to-end solutions. 【输出样例】 输出文件fcopy.out中内容为: Alcatel provides end-to-end solutions.
时间: 2024-03-10 17:51:13 浏览: 68
以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
FILE *fp_in, *fp_out;
char ch, last_ch = 0;
if (argc < 3) {
printf("Usage: %s source_file target_file\n", argv[0]);
exit(1);
}
fp_in = fopen(argv[1], "r");
fp_out = fopen(argv[2], "w");
while ((ch = fgetc(fp_in)) != EOF) {
if (ch == ' ') {
if (last_ch != ' ' && last_ch != '\t') {
fputc(ch, fp_out);
}
} else if (ch == '\t') {
if (last_ch != ' ' && last_ch != '\t') {
fputc(' ', fp_out);
}
} else {
fputc(ch, fp_out);
}
last_ch = ch;
}
fclose(fp_in);
fclose(fp_out);
return 0;
}
```
该程序使用了命令行参数,通过 `argc` 和 `argv` 从命令行中获取源文件名和目标文件名,并进行相应的文件操作。在读取源文件时,逐个字符进行判断,如果是空格或制表符,则判断它是否为连续空格或制表符的第一个,如果是,则将其写入目标文件中,否则忽略;如果是其他字符,则直接写入目标文件中。最后关闭输入文件和输出文件,完成程序的执行。
阅读全文