第三次作业(字符,单词统计)
题目要求:从文件中读取字符,然后统计字符的数目,和单词的数目。
首先打开一个文件,对里面存的东西进行统计,刚开始判断是否为单词的组成部分:
代码如下:
FILE *fp;//文件指针 char c; //文件字符读取存储 fp = fopen("D:\\a\\a.txt", "r"); if (fp == NULL) { printf("文件打开失败"); return 0; } while (feof(fp) != 1) { c = fgetc(fp); if (isalnum(c) != 0 || c == '_' || c == '.') { Word(fp); words[wordnum] = c; wordnum++; } else if (c == ' ') { space++; } else { character++; } }
如果是单词的组成部分之一,那么函数跳入单词判断函数word()中,且将文件指针传进去,且该字符存入单词存储的数组中,
word()函数如下:
int Word(char *f) { char c; while (feof(f) != 1) { c = fgetc(f); if (isalnum(c) != 0 || c == '_' || c == '.') { character++; words[wordnum] = c; wordnum++; } else if (c == ' ') { space++; word++; words[wordnum] = ' '; wordnum++; return 1; } else { word++; words[wordnum] = ' '; wordnum++; return 1; } } }
当文件没有结束时,判断指针所指向的字符是否为单词的组成部分,如果是字符数加一,该字符存入单词数组中;如果是空格,空格字符数加一,字符数加一,单词数加一,在单词数组中存入一个空格字符;如果是其他字符,字符数加一,单词数加一,在单词数组中存入一个空格字符。返回主函数。
输出结果示例:
然后是单词输出,函数如下:
int show() { int a; for (int i = 0; i < wordnum - 1; i++) { if (words[i] == ' ') { printf("\n"); continue; } printf("%c", words[i]); } printf("谢谢使用");
}
当数组中元素是空格时,说明是一个单词结束了,如果是,输出回车,且用continue跳出本次循环,
输出结果示例:
作业感想:
这个程序并不是太难,主要是用到有关文件的知识,开始的时候感觉比较烦,因为要写文件,但是当写完程序时,看着自己程序运行时感到非常高兴,以前的我不怎么愿意用文件,有时候都是用大的数组,或者是结构体进行存储,但是突然发现写文件的代码挺好玩的,比较有意思,以后还要多多练习,尤其是自己不太喜欢的地方。
总代码:
#include<stdio.h> #include<ctype.h> #include<stdlib.h> int character = 0;//字符数 int word = 0;//单词数 int space = 0;//空格数 char words[1000];//单词存储 int wordnum = 0;//单词存储的数组位置 int Word(char *f);//检验是否为单词 int show();//显示单词 int main() { int choice;//选择的输入 FILE *fp;//文件指针 char c; //文件字符读取存储 fp = fopen("D:\\a\\a.txt", "r"); if (fp == NULL) { printf("文件打开失败"); return 0; } while (feof(fp) != 1) { c = fgetc(fp); if (isalnum(c) != 0 || c == '_' || c == '.') { Word(fp); words[wordnum] = c; wordnum++; } else if (c == ' ') { space++; } else { character++; } } printf("文件中字符,单词统计如下:\n"); printf("单词数:%d,符号数:%d,空格数:%d\n", word, character, space); fclose(fp); printf("查看单词请按1,否则请按任意键"); scanf_s("%d", &choice); if (choice == 1) { show(); } else return 1; } int Word(char *f) { char c; while (feof(f) != 1) { c = fgetc(f); if (isalnum(c) != 0 || c == '_' || c == '.') { character++; words[wordnum] = c; wordnum++; } else if (c == ' ') { space++; word++; words[wordnum] = ' '; wordnum++; return 1; } else { word++; words[wordnum] = ' '; wordnum++; return 1; } } } int show() { int a; for (int i = 0; i < wordnum -1; i++) { if (words[i] == ' ') { printf("\n"); continue; } printf("%c", words[i]); } printf("谢谢使用"); }