zoukankan      html  css  js  c++  java
  • 第二次作业(WordCount)重制版

    Github项目地址:https://gitee.com/DamonGetup/WordCount/tree/master

    基本功能:

                     对程序设计语言源文件统计字符数、单词数、行数,统计结果以指定格式输出到默认文件中,以及其他扩展功能,并能够快速地处理多个文件。
                     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
    

    扩展功能:

                  wc.exe -s            //递归处理目录下符合条件的文件
                  wc.exe -a file.c     //返回更复杂的数据(代码行 / 空行 / 注释行)
                  wc.exe -e stopList.txt  // 停用词表,统计文件单词总数时,不统计该表中的单词
    

    基本思路:

    由于很久没使用C语言了,导致编写进度进展的很慢。但根据要求进行需求分析,主要要实现的功能有:用户的命令行输入,文件的获取与读写,文件内容遍历,字符串匹配等。该程序代码的结构如下, 从根据argv[]传入的参数,条件语句判断。来决定进行什么功能。

    代码设计:

    -c 返回文件字符数

    int countc(char *file) //返回文件的字符数 
    {   FILE *f;
    	f = fopen(file, "r");
    	char a;
    	if(NULL==(f=fopen(file,"r")))
        {
    	    printf("file is NULL");
    	}
        else
    	while (!feof(f))
    	{
    		a=fgetc(f);
    		if (a != ' '&&a != '
    '&&a != '	')
    		cchar++;
    	}
    	fclose(f);printf("charnum:%d ",cchar);
    }
    

    -w返回文件单词总数

    int countw(char *file)//返回文件词的数目 
    {   FILE *f;
    	f=fopen(file,"r");
    	char ch;
    	if(NULL==(f=fopen(file,"r")))
        {
         printf("file is NULL");
        }
        else
    	while(!feof(f))
    	{
    		ch=fgetc(f);
    		if((ch >= 'a'&&ch <= 'z')||(ch>='A'&&ch<='Z')||ch=='_')
    		aword=1;
    	else if (aword)
    	{
    				cword++;
    				aword=0;
    	}
    	}
    	fclose(f);
    	printf("wordnum:%d ",cword);
    }
    

    -l返回文件总行数

    int countl(char *file) //返回文件的行数
    {   FILE *f;
    	f = fopen(file, "r");
        int cline = 0;
    	char a;
    	if(NULL==(f=fopen(file,"r")))
        {printf("file is NULL");}
        else while(!feof(f))
         {
             a=fgetc(f);
                if(a=='
    '||a=='	')
                   cline++;
         }
        
        fclose(f);printf("Linenum:%d ",cline);
        return 1;
    }
    

    主函数根据argv[]传入的参数,进行条件语句判断。来决定进行什么功能。

    int main(int argc, char* argv[])             
    {
        FILE *fp;
        while(1)
        {
    
            if((fp=fopen(argv[2],"r"))==NULL)
            {  
            printf("FileNull
    
    
    ");
            scanf("%s%s%s",argv[0],argv[1],argv[2]);
            continue;
            }
    
            else if(!strcmp(argv[1],"-w")) 
            countw(argv[2]);       
             
            else if(!strcmp(argv[1],"-c"))  
            countc(argv[2]);   
                 
            else if(!strcmp(argv[1],"-l"))    
            countl(argv[2]);      
          
            else if(!strcmp(argv[1],"-a"))                
           {     
              count_blankline(argv[2]); 
              count_noteline(argv[2]);
              count_codeline(argv[2]);
           }
    
            else if(!strcmp(argv[1],"-s"))
           {
               searchfile();
           }
    
            else
                printf("NullPoint
    ");
    
            printf("
    
    ");
    
            scanf("%s%s%s",argv[0],argv[1],argv[2]);
        }
        return 0;
    }
    

    测试思路:

    采用白盒测试用例设计法覆盖可能出现的左右情况,尽量找到代码中可能蕴含的错误并改正,因此,测试设计应该覆盖判断中的各种边界情况。-c test.txt,-w test.txt,-l test.txt,-c –w test.txt,-c –l test.txt,-w –l test.txt,-c –w –l test.txt,-c test.txt –o output.txt,-w test.txt –o output.txt,-l test.txt –o output.txt,-c –w test.txt –o output.txt,-c –l test.txt –o output.txt,-w –l test.txt –o output.txt,-c –w –l test.txt –o output.txt。

    测试文件:


    测试均可通过,表示基本功能没有问题,不一一列举了。

    总结:本次作业较为仓促,有多个功能聚集在主函数内部,比较杂乱,没有比较好的代码优化。算法的性能还有待提高和优化,对问题的考虑可以更全面。但是加强了编程能力,让我对时间安排有了更充分的理解,理解了上课所学习的基本内容,初步理解的测试的相关方法,希望能在今后的学习中对软件测试有更加深刻的理解和学习。

    参考文献

    【1】http://www.cnblogs.com/xinz/p/5044037.html
    【2】http://www.cnblogs.com/xiaobao123/p/9649693.html
    【3】https://www.cnblogs.com/IHHHH/p/8612972.html
    【4】https://www.jianshu.com/p/5323bca00825

  • 相关阅读:
    转:C/C++基本数据类型所占字节数
    转:为什么C++中空类和空结构体大小为1?
    转:内存字节对齐
    转:100层楼扔两个鸡蛋的问题
    移动互联网
    辗转相除法
    斐波那契数列
    error C2783: 无法为“T”推导 模板 参数
    创新工场和海豚浏览器宣讲会启示
    转:快速排序的一个小问题没想明白,求助各位
  • 原文地址:https://www.cnblogs.com/Damonblogs/p/9733083.html
Copyright © 2011-2022 走看看