首页 > 其他 > 详细

第二次作业(WordCount)

时间:2018-09-30 23:54:15      阅读:223      评论:0      收藏:0      [点我收藏+]

#WordCount

1.Gitee地址

https://gitee.com/sunlong1233/WordCount

2.作业要求

WordCount的需求可以概括为:对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。

可执行程序命名为:wc.exe,该程序处理用户需求的模式为:

wc.exe [parameter] [input_file_name]

存储统计结果的文件默认为result.txt,放在与wc.exe相同的目录下。

wc.exe -c file.c //返回文件 file.c 的字符数

wc.exe -w file.c //返回文件 file.c 的单词总数

wc.exe -l file.c //返回文件 file.c 的总行数

wc.exe -o outputFile.txt //将结果输出到指定文件outputFile.txt

3.思路

我运用的是C语言编写的WordCount,三个函数File_c,file_w,file_l,分别统计字符数,单词数和行数,并把统计的信息录入到result.txt的文件中。

4.代码

4.1 统计字符

int count_C(char*filename)
{
    FILE *fp = fopen(filename,"r");
    char buffer[100];
    int num=0;
    int len;
    char f=0;
    while(fgets(buffer,100,fp) != NULL)
    {
        len = strlen(buffer);
        for(int i=0;i < len; i++)
        {
            f=buffer[i];
            if(f != ‘ ‘ && f != ‘\t‘ && f != ‘\n‘ && f != ‘\r‘)
            {
                num++;
            }
        }
    }
    fclose(fp);
    return num;
}

4.2 统计单词数

int count_W(char*filename)
{
    FILE *fp = fopen(filename,"r");
    char buffer[100];
    bool islast = false;
    int num=0;
    int len;
    int line=0;
    char f=0;
    while(fgets(buffer,100,fp)!=NULL)
    {
        line++;
        len=strlen(buffer);
        for(int i=0; i < len; i++)
        {
            f=buffer[i];
            if(f != ‘ ‘ && f != ‘\t‘ && f!= ‘\n‘)
            {
                !islast && num++;
                islast = true;
            }
            else if(f != ‘\n‘ && f != ‘\r‘)
            {
                islast = false;
            }
        }
    
        !islast && num++;
        islast = true;
    }
    fclose(fp);
    return num+line-1;
    
}

4.3 统计行数

int count_L(char*filename)
{
    FILE *fp = fopen(filename,"r");
    char buffer[100];
    int num=0;
    while(fgets(buffer,100,fp)!=NULL)
    {
        num++;
    }
    fclose(fp);
    return num;
}

4.4 打印信息


//打印字符数
void outfile_C(char*ofname,char* filename,int file_C)
{
    FILE *of=fopen(ofname,"a");
    fprintf(of,"%s 字符数:%d\n",filename,file_C);
    fclose(of);
}

//打印单词数
void outfile_W(char*ofname,char* filename,int file_W)
{
    FILE *of=fopen(ofname,"a");
    fprintf(of,"%s 单词数:%d\n",filename,file_W);
    fclose(of);
}

//打印行数
void outfile_L(char*ofname,char* filename,int file_L)
{
    FILE *of=fopen(ofname,"a");
    fprintf(of,"%s 行数:%d\n",filename,file_L);
    fclose(of);
}

4.5 主函数

int main(int argc, char* argv[])
{
    FILE *fp;
    FILE *of;
    int file_C;
    int file_W;
    int file_L;
    char *filename = argv[argc-1];
    char ofname[] = "result.txt";
    of=fopen(ofname,"w+");//初始化result
    if(filename == NULL)
    {
        printf("指令出错");
        return 0;
    }
    else
    {
        for(int i=1; i < argc-1; i++)
      {
         switch(argv[i][1])
        {
            case ‘c‘:
                          file_C=count_C(filename);
                          printf("%s, 字符数: %d\n",argv[argc-1],file_C);
                          outfile_C(ofname,argv[argc-1],file_C);
                          break;
                        
            case ‘w‘:
                          file_W=count_W(filename);
                          printf("%s, 单词数: %d\n",argv[argc-1],file_W);
                          outfile_W(ofname,argv[argc-1],file_W);
                          break;
            case ‘l‘:
                          file_L=count_L(filename);
                          printf("%s, 行数: %d\n",argv[argc-1],file_L);
                          outfile_L(ofname,argv[argc-1],file_L);
                          break;
            
        }
      }
    }
    fclose(fp);
    fclose(of);
    return 0;
}

5 测试

技术分享图片
技术分享图片
技术分享图片

6 总结

中途-o功能出现了小问题,只好另外找方法,最后还是大致做完了,希望下次能完成的更好。

7 参考

https://blog.csdn.net/clh19901213/article/details/18269989
https://www.cnblogs.com/saolv/p/7793379.html

第二次作业(WordCount)

原文:https://www.cnblogs.com/sunlong1233/p/9733624.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!