c语言 读取文件words.txt中的全部文本,统计其中有多少个空格,数字,标点符号和单词(规定单词间以一个或多个空格分开)。假设一个单词恰好在行末结束,那么下一行的开头应有空格,句号和逗号后面也应有空格。
时间: 2024-02-12 15:05:28 浏览: 63
好的,我可以帮你解决这个问题。以下是一个示例代码,可以实现你的需求:
```c
#include <stdio.h>
#include <ctype.h>
int main() {
FILE *fp;
int space_count = 0, digit_count = 0, punct_count = 0, word_count = 0;
char c, prev_c = ' ';
fp = fopen("words.txt", "r");
if (fp == NULL) {
printf("Error opening file\n");
return 1;
}
while ((c = fgetc(fp)) != EOF) {
if (isspace(c)) {
space_count++;
}
if (isdigit(c)) {
digit_count++;
}
if (ispunct(c)) {
punct_count++;
}
if (isspace(c) && !isspace(prev_c)) {
word_count++;
}
prev_c = c;
}
if (!isspace(prev_c)) {
word_count++;
}
fclose(fp);
printf("Spaces: %d\nDigits: %d\nPunctuation: %d\nWords: %d\n", space_count, digit_count, punct_count, word_count);
return 0;
}
```
该代码使用了标准库函数 `fopen` 和 `fgetc` 来读取文件中的字符,使用 `isspace`、`isdigit` 和 `ispunct` 函数来判断字符的类型,并使用计数器来统计各种类型的字符出现的次数。对于单词的统计,代码使用了一个简单的状态机来判断单词的开始和结束。
你可以将该代码保存为一个 C 文件,然后使用 C 编译器编译运行即可。注意要将文件名 `words.txt` 替换成你实际使用的文件名。
阅读全文