博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20180918 博客作业
阅读量:6221 次
发布时间:2019-06-21

本文共 2757 字,大约阅读时间需要 9 分钟。

此作业的要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2126

词频统计

程序需求:

从文件中读取字符串,摘取其中的单词并统计单词数量。可以从控制台读取文件名,还可以从控制台读取目录名批量统计,还可以重定向输出。

代码实现:

我的代码发布在:https://git.coding.net/wangyupan/fist-program.git

1.提取输入的单词,统计单词数量。

long long total=0;    long long num=0;    fp=fopen(strtemp,"r");    freopen(strtemp,"r",stdin);    while(!feof(fp))    {        fscanf(fp,"%s",str);        int len=strlen(str);        int j=0;        for(int i=0; i
='A'&&str[i]<='Z') { str[i]+=32; } if(str[i]>='a'&&str[i]<='z') { str1[j++]=str[i]; } else { str1[j]='\0'; if(str1[0]=='\0') continue; else total++; bool flag=true; for(int i=0; i

2.按照出现的频次对单词排序。

bool cmp(word a,word b){    if(a.cnt>b.cnt)        return true;    return false;}sort(Word,Word+num,cmp);

3.对统计完的单词重定向输出,单词数量过大时,只输出前二十个。

freopen("out.txt","a+",stdout);    if(mode==2){        printf("%s\n",strtemp);        printf("\n");    }    if(num>20)        num=20;    printf("total %ld\n",total);    for(int i=0; i

4.程序的main函数,控制文件名和目录名的输入。

int main(int argc, char *argv[]){    struct _finddata_t fa;    long fHandle;    /*printf("Mode:1为文件,2为文件夹.\n");    printf("请选择模式:");    scanf("%d",&mode);*/    char string3[30];    mode=1;    int id;    if(argc==2) {        id=1;        strcpy(string3,argv[1]);        if(string3[1]==':')            mode=2;    }    if(argc==3) id=2;    if(argc==4) id=3;    char string1[30];    char string2[30];    if(mode==1)    {        //printf("请输入文件名:");        //scanf("%s",string1);        strcpy(string1,argv[id]);        int len=strlen(string1);        strncpy(string2,&string1[len-4],4);        string2[4]='\0';        if(strcmp(string2,".txt")!=0){            strcat(string1,".txt");        }        counter(string1);    }    else if(mode==2)    {        //printf("请输入文件夹的名字:");        char fileN[30];        strcpy(fileN,argv[1]);        strcat(fileN,"\\*.txt");        if((fHandle=_findfirst(fileN,&fa))==-1L)        {            printf("当前目录下没有txt文件\n");        }        do        {            counter(fa.name);        }        while(_findnext(fHandle,&fa)==0);        _findclose(fHandle);    }    fclose(fp);    return 0;}

 

功能测试:

功能1  小文件输入。 

功能2 支持命令行输入英文作品的文件名。

功能3 支持命令行输入存储有英文作品文件的目录名,批量统计。

功能4 实现重定向

PSP

PSP阶段 预计花费时间(min) 实际花费实际(min) 花费时间差距(min) 原因
功能1:小文件输入 52 74 22 读取字符串时,统计错误,修改程序逻辑比较花费时间。
功能2:支持命令行输入英文作品的文件名 17 58 41 只有英文名,不是*.txt文件,以前没接触过,查阅资料花费了一些时间。数组发生越界,调试时间过长。
功能3:支持命令行输入存储有英文作品文件的目录名,批量统计 13 36 23 读取目录名也没遇到过,处理起来不太顺畅,学习了好长时间相关博客
功能4:实现重定向 21 13 8 重定向向潘世维同学进行了请教,实现的较快。

转载于:https://www.cnblogs.com/wangyupan/p/9695290.html

你可能感兴趣的文章
Jafka源码粗略解读之一
查看>>
Windows 7 - folder options / single-click or double-click
查看>>
IP分组格式
查看>>
Cocos2d策略类塔防精品手游-MiniTD独家完整源码
查看>>
怎么样和老师学英语呀?
查看>>
【小松教你手游开发】【unity实用技能】unity在游戏中更换角色的shader,比如加个流光...
查看>>
一个脚本实现Mysql的备份
查看>>
内核源码研读预备知识
查看>>
linux 双网卡共享网络
查看>>
CentOS6.5下安装配置VNC
查看>>
javascript成神之路(2):深入理解原型以及原型链的重要性
查看>>
针对WPF开发的报表工具控件Stimulsoft Reports.Wpf
查看>>
电商改变了我们什么?
查看>>
JavaScript之数组Array
查看>>
MySQL-NonMySQL同步工具源码解读——鉴权与注册
查看>>
Oracle SQL Developer 语言设置
查看>>
未解决安装产品 D:\ru\ClientLanguagePack.msi 失败。错误代码为 1603
查看>>
Hadoop集群日常运维
查看>>
Redis的过期策略
查看>>
安装epel源出错解决方法 Cannot retrieve metalink for repository
查看>>