17074211张昊 计算与软件工程作业4

作业要求 https://edu.cnblogs.com/campus/jssf/infor_computation17-31/homework/10534
课程目标 完成简单软件功能的开发,会对简单代码进行审核,学会结对编程,和队友搭档一起开发新的功能,会对代码进行单元测试等,分析代码的利用率
参考文献 https://blog.csdn.net/Jiajikang_jjk/article/details/88199213 https://www.cnblogs.com/xinz/archive/2011/08/07/2130332.html
码云 https://gitee.com/zhang_hao17074211/learngit/blob/master/17074211zuoye4
作业1
  • 每个人针对之前两次作业所写的代码,针对要求,并按照代码规范(风格规范、设计规范)要求评判其他学生的程序,同时进行代码复审,要求评价数目不少于8人次,
  • 评价内容直接放在你被评价的作业后面评论中
  • 同时另建立一个博客,将你作的评论的截图或者链接,放在博客中,并在你的博客中谈谈自己的总体看法


作业2
1.实现一个简单而完整的软件工具(中文文本文件人物统计程序):针对小说《红楼梦》要求能分析得出各个人物在每一个章回中各自出现的次数,将这些统计结果能写入到一个csv格式的文件。
2.进行单元测试、回归测试、效能测试,在实现上述程序的过程中使用相关的工具。
3.进行个人软件过程(PSP)的实践,逐步记录自己在每个软件工程环节花费的时间。
4.使用源代码管理系统 (GitHub, Gitee, Coding.net, 等);
5.针对上述形成的软件程序,对于新的文本小说《水浒传》分析各个章节人物出现次数,来考察代码。
结对编程同伴链接:https://www.cnblogs.com/guozhiwei123/p/12619738.html

  #include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Word //声明一个结构体,分别存储单词和对应单词的个数
{
    size_t time;
    char word[230000];
};


void Copy(struct Word *array, FILE *read, const int length);
void Count_for_word(struct Word *array, const int length);

// 函数一
void Copy(struct Word *array, FILE *read, const int length) //该函数的作用是把文本中的单词复制到数组中
{

    char ch, word[230000];
    int i = 0, j;

    while (fscanf(read, "%s", &word) != EOF)
    {
        strcpy(array[i].word, word); // 将word复制到arra[i]中
        ++i;                         //移动数组的下标
    }
    fclose(read);                  // 关闭文件指针
    Count_for_word(array, length); // 调用自定义函数
}

// 函数二
void Count_for_word(struct Word *array, const int length) //统计单词的个数
{
    int i, j;

    for (i = 0; i < length; i++)
    {
        array[i].time = 1;
        for (j = i + 1; j < length; j++)
        {
            if (strcmp(array[i].word, array[j].word) == 0)
            {
                ++array[i].time;            //如果遇到相同的单词,就把相应的结构体部分增加 1
                strcpy(array[j].word, " "); //并把该单词置为空,因为已经读取到数组中了,所以这里改变的是数组的数据,不影响文本数据
            }
        }
    }
    
    printf("the file have %d word\n\n", length);
    
    for (int index = 0; index < length; index++) // 冒泡排序
    {
        for (int temp = 0; temp < length - index-1; temp++)
        {
            // 例如:length = 5
            if (array[temp].time < array[temp + 1].time)
            {
                struct Word word = array[temp];
                array[temp] = array[temp + 1];
                array[temp + 1] = word;
            }
        }
    }


    for (i = 0; i < length; i++)
        if (strcmp(array[i].word, " ") != 0)
        { // 当不相等时候
            //printf("%-5s occurrs  %-3d %s\n", array[i].word, array[i].time, ((array[i].time > 1) ? "times" : "time"));
            printf("%-5s:%-3d\n", array[i].word, array[i].time);
        }
}

int main(int argc, char *argv[])
{
    char word[230000];
    int length = 0, ch;
    FILE *read;
    struct Word *array;

    if (argc < 2 || argc > 2)
    {
        printf("usage: %s filename\n", argv[0]);
        exit(EXIT_FAILURE);
    }
    // 打开文本
    if ((read = fopen(argv[1], "r")) == NULL)
    {
        printf("open file failure\n");
        exit(EXIT_FAILURE);
    }
    //
    while (fscanf(read, "%s", &word) != EOF) //测试是否读到文件末尾
    {
        ++length; //统计文本中单词的个数
    }

    rewind(read);                                 //把文件指针置为文本开始的位置,并清除错位信息
    array = malloc(sizeof(struct Word) * length); // 单词的长度动态分配内存
    Copy(array, read, length);                    // 调用自定义函数

    return 0;
}


posted @ 2020-04-05 11:01  17数31张昊  阅读(199)  评论(0编辑  收藏  举报