1. 程式人生 > >軟工第二次作業

軟工第二次作業

依賴項 get nal 為我 結構 進步 cnblogs lag tro

github


技術分享圖片

解題思路
剛拿到題目,我先看了幾遍,大致的了解題目的含義。因為有些工具不會使用,如vs2017,我就先去學習工具的使用了。從工具的配置以及大致的使用過程,我都通過上網查資料以及詢問同學。查資料以及學習資料的過程花費了我不少的時間,但有很大的收獲,起碼我些許懂得如何使用當下最時髦的編譯軟件。至於編碼,因為我的代碼能力較弱,我一開始沒有自己動手打,而是去網上找了一個和題目有相似性的c代碼,自己再將c改成了c++,還補充了一些功能上去,雖然還是有bug,但是編譯過了,我也有些許安慰。

設計實現過程
以下是我的流程圖
技術分享圖片

單元測試功能因為代碼有bug,然後沒有通過,不過知道怎麽設置附加依賴項。
技術分享圖片

性能分析
由於自己水準不夠,代碼沒有實現全部的功能,所以我就只是嘗試了一下什麽是性能分析功能,不過我會利用課余時間,拿一段簡單易實現的代碼,去測試一下分析功能。
技術分享圖片

代碼說明

void readfile(struct word * &head)
    {
        FILE *fp;
        linecount l;![](https://images2018.cnblogs.com/blog/1092899/201809/1092899-20180912203349918-1068576763.png)


        if ((fp = fopen("in.txt" ,"r") )== NULL)
        {
            printf("無法打開此文件!\n");
            exit(0);
        }
        while (!feof(fp))
        {
            int i = 0;
            ch = fgetc(fp);
            if (ch != 32 && ch != 10 && ch != 9) flag1 = 1;
            temp[0] = ‘ ‘;                                //保證單詞的開始一定是有效字符 
            do
            {
                charnum++;                              //統計字符數 
                if (ch >= ‘a‘&&ch <= ‘z‘ || ch >= ‘A‘&&ch <= ‘Z‘ || ch >= ‘0‘&&ch <= ‘9‘)
                {
                    if (ch >= ‘A‘&&ch <= ‘Z‘)                //大寫化小寫 
                    {
                        temp[i] = ch - 32;
                        i++;
                    }
                    else
                    {
                        temp[i] = ch;
                        i++;
                    }
                    if (i <= 3 && ch >= ‘0‘&&ch <= ‘9‘)  flag = 0;   //如果字符序列前四個有數字則不算單詞 
                }
                ch = fgetc(fp);
                if (ch != 32 && ch != 10 && ch != 9) flag1 = 1;
                if (ch = 10)
                {
                    l.line(flag1);
                    flag1 = 0;
                }
                if (feof(fp))
                {
                    charnum--;                            //多加了一個EOF 
                    break;
                }
            } while (ch >= ‘a‘&&ch <= ‘z‘ || ch >= ‘A‘&&ch <= ‘Z‘ || ch >= ‘0‘&&ch <= ‘9‘ || temp[0] == ‘ ‘);
            charnum++;
            temp[i] = ‘\0‘;
            p = head->next;
            while (p)                                
            //舊單詞,詞頻加1 
            {
                if (!strcmp(temp, p->name))
                {
                    p->num++;
                    wordnum++;
                    break;
                }
                p = p->next;
            }
            if (!p&&temp[0] != ‘\0‘&&flag == 1)                      
            //新單詞存入鏈表
            {
                p = new word;
                strcpy_s(p->name, temp);
                p->num = 1;
                wordnum++;
                p->next = head->next;
                head->next = p;
            }
            flag = 1;
        }
    }
};

以上就是我的核心代碼。我的思路是通過逐個字符的讀取文本文件,將相似於單詞的字符串存入一個字符數組,然後在通過一個判斷,判斷這個字符串是不是單詞,是就存儲進結構體鏈表中。

心得體會
這次的實踐,由於c++使用的較少,然後也是初次使用vs2017,我的代碼實現挺糟糕的,只完成字符的統計功能。如果是用c寫的話到可以完成全部的功能,由於時間問題我是不能在deadline之前實現全部功能,之後自己會找時間改進自己的代碼,讓自己能收獲到更多,總之讓我自己意識到自己的代碼水平有很大的進步空間。然後就是上網學習資料,我覺得這獲得知識都是比較實用,多看看別人的博客對自己也是有很大的提升。還有就是以前從來沒有很系統的為一道題目做很系統的安排計劃,這次實踐讓我感覺到有一個系統的過程會省事h很多。

軟工第二次作業