已知一段程序或字符串,例如:There are some books on the desk 1.该程序或字符串从文件读入; 2. 统计非空格字符个数和字符串个数(不包含子串) 统计结果存入另一个文件; 要求界面友好,程序风格规范。 c语言
时间: 2024-09-24 12:02:14 浏览: 26
在C语言中,你可以按照以下步骤编写一个小程序来完成这个任务:
1. **打开文件**:
首先,需要使用`fopen`函数打开输入文件(假设名为"input.txt")以及输出文件(假设名为"output.txt"),如果成功则返回文件指针,失败则处理错误。
```c
#include <stdio.h>
...
FILE *input_file = fopen("input.txt", "r");
FILE *output_file = fopen("output.txt", "w");
if (!input_file || !output_file) {
// 处理文件打开失败的情况
}
```
2. **读取并统计字符**:
使用`fscanf`读取文件内容,并用`getchar`逐个检查每个字符,非空格字符累加。同时,每遇到换行符就增加字符串计数。
```c
int non_space_count = 0;
int string_count = 1; // 初始化为1,因为第一个非空格字符会立即被记录
while (EOF != fgetc(input_file)) {
if (isspace(getc(input_file))) {
non_space_count++;
} else {
non_space_count++;
}
if (!isspace(getc(input_file))) { // 检查是否到下一个非空格字符
string_count++;
}
}
```
3. **关闭文件并写入结果**:
完成读取后,记得关闭文件,并将统计结果写入到输出文件。
```c
fclose(input_file);
fprintf(output_file, "Non-space characters: %d\nStrings: %d\n", non_space_count, string_count);
fclose(output_file);
```
4. **用户界面与规范**:
为了使程序更具可读性,可以添加适当的注释,使用标准的命名约定,并在主函数中提供命令行参数解析,让用户通过参数指定输入和输出文件名。
5. **整体结构**:
程序应该包括一个`main`函数,其中包含上述步骤,以及错误处理部分。
完整示例:
```c
#include <stdio.h>
int main(int argc, char *argv[]) {
// 检查参数数量
if (argc != 3) {
printf("Usage: %s input_file output_file\n", argv[0]);
return 1;
}
FILE *input_file = fopen(argv[1], "r");
FILE *output_file = fopen(argv[2], "w");
if (!input_file || !output_file) {
perror("Error opening file");
return 1;
}
int non_space_count = 0;
int string_count = 1;
while (EOF != fgetc(input_file)) {
if (isspace(getc(input_file))) {
non_space_count++;
} else {
non_space_count++;
}
if (!isspace(getc(input_file))) {
string_count++;
}
}
fclose(input_file);
fprintf(output_file, "Non-space characters: %d\nStrings: %d\n", non_space_count, string_count);
fclose(output_file);
return 0;
}
```
阅读全文