C语言【问题描述】 实现程序:统计文本文件中的单词数和字符个数(不计算行末回车符)。单词指的是仅由英文字母组成的串,如:is7years这样的串按照两个单词计算。 【输入形式】 读取当前目录下文本文件in.txt,以统计该文件中单词和字符个数。 【输出形式】 输出in.txt中单词和字符个数,中间以一个空格分隔。 【样例输入】 in.txt的内容为: Hi I am an (CQU)student. 【样例输出】 6 23 【样例说明】 该输入文件中共有6个单词(即Hi, I, am, an, CQU, student)及23个字符。
时间: 2023-06-27 17:06:57 浏览: 136
以下是C语言实现代码:
```c
#include <stdio.h>
#include <ctype.h>
int main() {
FILE *fp = fopen("in.txt", "r"); // 打开文件
if (fp == NULL) {
printf("无法打开文件!\n");
return 1;
}
int word_cnt = 0, char_cnt = 0;
int in_word = 0; // 标记是否在单词中
char c;
while ((c = fgetc(fp)) != EOF) { // 逐个字符读取文件
if (isalpha(c)) { // 如果是字母
char_cnt++; // 字符个数加1
if (!in_word) { // 如果不在单词中
in_word = 1; // 标记进入单词
word_cnt++; // 单词数加1
}
} else if (c == '\n') { // 如果是行末回车符
continue; // 跳过不计
} else { // 其他字符
in_word = 0; // 标记离开单词
char_cnt++; // 字符个数加1
}
}
fclose(fp); // 关闭文件
printf("%d %d\n", word_cnt, char_cnt); // 输出结果
return 0;
}
```
代码注释:
1. `fopen`函数用于打开文件,其参数包括文件路径和打开方式("r"表示只读方式打开文件),成功返回文件指针,失败返回`NULL`。
2. `isalpha`函数用于判断一个字符是否为字母,是则返回非零值,否则返回0。
3. `fgetc`函数用于从文件中读取一个字符,成功返回字符值,失败返回`EOF`。
4. 在读取字符的过程中,根据字符类型分别更新单词数和字符数。在进入单词时,如果之前不在单词中,则单词数加1;在离开单词时,如果之前在单词中,则标记离开单词。
5. `fclose`函数用于关闭文件。
6. `printf`函数用于输出结果,其中`%d`表示输出整数。
阅读全文