您的位置:首页 > 其它

第三次作业(字符,单词统计)

2016-03-23 18:52 330 查看
题目要求:从文件中读取字符,然后统计字符的数目,和单词的数目。

首先打开一个文件,对里面存的东西进行统计,刚开始判断是否为单词的组成部分:

代码如下:

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("谢谢使用");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: