第三次作业(字符,单词统计)
2016-03-23 18:52
330 查看
题目要求:从文件中读取字符,然后统计字符的数目,和单词的数目。
首先打开一个文件,对里面存的东西进行统计,刚开始判断是否为单词的组成部分:
代码如下:
如果是单词的组成部分之一,那么函数跳入单词判断函数word()中,且将文件指针传进去,且该字符存入单词存储的数组中,
word()函数如下:
当文件没有结束时,判断指针所指向的字符是否为单词的组成部分,如果是字符数加一,该字符存入单词数组中;如果是空格,空格字符数加一,字符数加一,单词数加一,在单词数组中存入一个空格字符;如果是其他字符,字符数加一,单词数加一,在单词数组中存入一个空格字符。返回主函数。
输出结果示例:
然后是单词输出,函数如下:
当数组中元素是空格时,说明是一个单词结束了,如果是,输出回车,且用continue跳出本次循环,
输出结果示例:
作业感想:
这个程序并不是太难,主要是用到有关文件的知识,开始的时候感觉比较烦,因为要写文件,但是当写完程序时,看着自己程序运行时感到非常高兴,以前的我不怎么愿意用文件,有时候都是用大的数组,或者是结构体进行存储,但是突然发现写文件的代码挺好玩的,比较有意思,以后还要多多练习,尤其是自己不太喜欢的地方。
总代码:
首先打开一个文件,对里面存的东西进行统计,刚开始判断是否为单词的组成部分:
代码如下:
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("谢谢使用");
}
相关文章推荐
- 王朝阳:关爱留守儿童是每一位企业家应有的责任
- 素数判定
- apk中/res/raw目录与/assets目录的区别
- 第4周项目5 (1)用递归方法求解
- Go语言核心之美 3.3-Map
- Bzoj3522:[Poi2014]Hotel:树形DP:
- 利用SSZipArchive解析zip
- Android自定义控件系列案例【一】
- 47.Android View的加载过程 (转)
- mysql忘记root密码 + 授权登录
- Java Generics and Collections-2.4-2.5
- Java-动态传参调用kettle转换和作业
- 在Python里安装Jieba中文分词组件
- c++编译器模板机制剖析
- 论第一篇博文的正确姿势
- 设计模式系列(五)——抽象工厂模式
- 重复10个1~60顺序且不重复的随机数
- markdown 简明语法
- 代码片段的备份
- 仿win8菜单的按下缩小抬起恢复大小的效果