问题描述】写一个统计文件中单词和字符个数的程序。在此,单词指的是仅由字母组成的串。诸如is7years这样的串按照两个单词计算。 【输入形式】读取当前目录下文件in.txt,以统计该文件中单词和字符个数。 【输出形式】输出输入文件中单词和字符个数,中间以一个空格分隔。 【样例输入】in.txt的内容为: I am an (BeiHang)student. 【样例输出】5 25 【样例说明】该输入文件中共有5个单词(即I, am, an, BeiHang, student)及25个字符。 【评分标准】结果完全正确得30分,每个测试点6分,提交程序文件名为cexam4c1.c。
时间: 2024-02-19 07:57:42 浏览: 136
以下是一个实现上述功能的C语言代码:
```c
#include <stdio.h>
#include <ctype.h>
int main() {
FILE *fp;
char ch, last_ch = ' ';
int word_count = 0, char_count = 0;
// 打开文件
fp = fopen("in.txt", "r");
// 统计单词和字符个数
while ((ch = fgetc(fp)) != EOF) {
if (isalpha(ch)) { // 如果是字母
if (!isalpha(last_ch)) { // 如果上一个字符不是字母
word_count++; // 单词计数器加1
}
char_count++; // 字符计数器加1
} else if (ch == ' ') { // 如果是空格
if (isalpha(last_ch)) { // 如果上一个字符是字母
word_count++; // 单词计数器加1
}
char_count++; // 字符计数器加1
}
last_ch = ch; // 保存上一个字符
}
// 关闭文件
fclose(fp);
// 输出结果
printf("%d %d\n", word_count, char_count);
return 0;
}
```
在这个代码中,我们首先打开`in.txt`文件,并使用`fgetc`函数逐个读取文件中的字符。然后,我们使用`isalpha`函数来判断字符是否为字母。如果当前字符是字母且上一个字符不是字母,则将单词计数器加1。如果当前字符是空格且上一个字符是字母,则也将单词计数器加1。无论当前字符是什么,字符计数器都会加1。最后,我们输出单词和字符计数器的值。
阅读全文