• 碎阅创造营——团队编程


    github 的链接

    一、模块设计

    • 1.处理命令行输入
    • 2.统计字符数
    • 3.统计单词数
    • 4.统计有效行数
    • 5.统计词频
    • 6.输出词组的大小写判断和转换
    • 7.写入统计结果
    • 8.Github部分

    1、处理命令行输入

    int main(int argc, char* argv[])
    {
    	string inputname;                //命令行输入处理 
    	string outputname;
    	string a, b, c, d;
    	a = "-m";
    	b = "-n";
    	c = "-i";
    	d = "-o";
    	for (int i = 1; i < argc; i++)
    	{
    		if (argv[i] == c)
    		{
    			fp = fopen(argv[++i], "r");     //以文本方式打开文件。
    			if (fp == NULL)               //打开文件出错
    			{
    				cout << "Input not found.
    " << endl;
    				return 0;
    			}
    			continue;
    		}
    		if (argv[i] == d)
    		{
    			fq = fopen(argv[++i], "w");     //以文本方式打开文件。
    			if (fq == NULL)               //打开文件出错
    			{
    				cout << "Output not found.
    " << endl;
    				return 0;
    			}
    			continue;
    		}
    
    	}
    	 int totalNum[3] = {0, 0, 0};
    
       	if(fq==NULL)
    	{
    		cout<<"Output not found.
    "<<endl;
    		return 0;
    	}
    }
    

    2、统计文件的字符数、单词总数、文件的有效行数

    • 数组buffer[],用来存储读每行的内容
    • bufferLen,存储内容的长度
    • charNum,当前行的字符数
    • wordNum,当前行的单词数
    • totalNum[0],总行数
    • totalNum[1],总字符数
    • totalNum[2],总单词数

    主要思路:每读入一行有效内容,总行数 totalNum[0](初值为0)对应+1。每一行统计结束后,将当前行的字符数、当前行的单词数对应加到总字符数totalNum[1]、总单词数totalNum[2],得到到当前行为止的总字符数、总单词数,再将当前行的字符数charNum、当前行的单词数wordNum重新置为0,为下一行统计做准备。

    int *getCharNum(int *totalNum){
        char buffer[1003];  //缓冲区,存储读取到的每行的内容
        int bufferLen;  // 缓冲区中实际存储的内容的长度
        int i;  // 当前读到缓冲区的第i个字符
        char c;  // 读取到的字符
        int isLastBlank = 0;  // 上个字符是否是空格
        int charNum = 0;  // 当前行的字符数
        int wordNum = 0; // 当前行的单词数
    
        printf("
    ");
        // 每次读取一行数据,保存到buffer,每行最多只能有1000个字符
        while(fgets(buffer, 1003, fp) != NULL){
            bufferLen = strlen(buffer);
            // 遍历缓冲区的内容
            for(i=0; i<bufferLen; i++){
                c = buffer[i];
                if( c==' ' || c=='	'){  // 遇到空格
                    !isLastBlank && wordNum++;  // 如果上个字符不是空格,那么单词数加1
                    isLastBlank = 1;
                }else if(c!='
    '&&c!='
    '){  // 忽略换行符
                    charNum++;  // 如果既不是换行符也不是空格,字符数加1
                    isLastBlank = 0;
                }
            }
    
            !isLastBlank && wordNum++;  // 如果最后一个字符不是空格,那么单词数加1
            isLastBlank = 1;  // 每次换行重置为1
    
            // 一行结束,计算总字符数、总单词数、总行数
            totalNum[0]++;  // 总行数
            totalNum[1] += charNum;  // 总字符数
            totalNum[2] += wordNum;  // 总单词数
    
           // printf("%-7d%-7d%d
    ", totalNum[0], wordNum, charNum);
    
            // 置零,重新统计下一行
            charNum = 0;
            wordNum = 0;
        }
        return totalNum;
    }
    

    二、组员职责分工

    成员 负责内容
    卢昱妃 输入输出+统计字符数、单词总数、有效行数+Github部分
    蓝飞鹏 Github部分
    苏杰隆 分工+Github部分
    黄淑云 博客部分
    林震 输入+统计词组及词频部分
    陈毅东 统计词组及词频部分
    林涛 统计词组及词频部分
    刘新耀 统计词组及词频部分

    三、程序运行截图

    四、提交日志截图

    附上团队讨论现场图(感谢张栋老师现场拍摄):

  • 相关阅读:
    HttpClient post封装
    UGUI 自动布局的重叠BUG
    什么时候必须使用UI相机? 多个相机的作用原理?
    UGUI BUG
    C# StopWatch的BUG????
    TrinityCore3.3.5编译过程-官方指导-踩坑总结
    C# unsafe模式内存操作深入探索
    C++提高编译与链接速度的资料
    C++复习笔记
    WOW研究资料收集
  • 原文地址:https://www.cnblogs.com/suiyuechuagnzaoying/p/11703010.html
Copyright © 2020-2023  润新知