[轉]錯誤記錄

來源:互聯網
上載者:User

標籤:

題目:簡單錯誤記錄
題目描述:
開發一個簡單的錯誤記錄功能模組,能夠記錄出錯的代碼所在的檔案名稱和行號。
處理:
1、記錄最多8條錯誤記錄,迴圈記錄,對相同的錯誤記錄(淨檔案名稱和行號完全符合)只記錄一條錯誤,錯誤計數增加;
2、超過16個字元的檔案名稱,只記錄檔案的最後有效16個字元;
3、輸入的檔案可能帶路徑,記錄檔案名稱不能帶路徑

輸入描述:

一行或多行字串。每行包括帶路徑檔案名稱,行號,以空格隔開。

檔案路徑為windows格式

如:E:\V1R2\product\fpgadrive.c 1325

輸出描述:

將所有的記錄統計並將結果輸出,格式:檔案名稱程式碼數數目,一個空格隔開,如: fpgadrive.c 1325 1 

結果根據數目從多到少排序,數目相同的情況下,按照輸入第一次出現順序排序。

如果超過8條記錄,則只輸出前8條記錄.

如果檔案名稱的長度超過16個字元,則只輸出後16個字元

輸入例子:

E:\V1R2\product\fpgadrive.c 1325

輸出例子:

fpgadrive.c 1325 1
 

 
題目分析:
①題目首先比較每次錯誤,如果相同我們只需要記錄一次錯誤,但是錯誤計數要加1;所以我們想到要把每次錯誤儲存在一個二維數組中,這個數組為8行17列store[8][17]
②我們要記錄錯誤計數,因為每個錯誤可能次數不一樣,所以我們也定義一個一維數組counts[i]
③超過16個字元的檔案名稱,我們只記錄檔案的最後有效16個字元,所以我們要區分開舒瑞虎的檔案名稱和行數,所以我們又需要定義一個一維數組儲存錯誤所在行號rows[]
④檢測檔案名稱的長度,我們需要從後往前數,檢測/字元,這裡需要注意C語言中逸出字元用雙右斜杠表示逸出字元。
⑤我們還需要一個計較每次錯誤是不是相等,我們可以利用字串中strcmp來比較,而且行也需要相等,如果是第一次輸入時,我們就不需要比較。之後每輸入一次都要和前面每一次進行比較。用迴圈解決
⑥如果不相等,我們就直接將字串拷貝到store中,用字串處理strcpy
⑦最後輸出格式,由題意可以知道我們這裡要輸出前面所有的錯誤,所有我們要採用一個for迴圈,輸出所有的錯誤。錯誤中包含store[],rows[],counts[]
學習筆記:
①充分利用數組來完成演算法
如果有很多個字串需要儲存,我們需要用字串數組,二維數組來儲存,store[i]表示一個字串
②充分利用字串的功能strcpy拷貝和strcmp比較
③注意如果我們知道一個數組的初始地址的時候,我需要表示字串後面的字串我們可以這樣表示&s[len - 1 -i]。學會這種表示方法

 

=============================================================================
參考代碼:

//簡單錯誤記錄.cpp#include <iostream>#include <string>using namespace std;const int maxn = 1000;char s[maxn];int main(){    //初始化    char store[8][17] = {0};    int counts[8] = {0};    int rows[8] = {0};    int row,kase = 0;    //輸入    while(cin >> s >> row)    {        int len = strlen(s);        int i;        //只保留最後有效字元16個字元        for(i = 0;i < 16; i++)        {            if(s[len - 1 - i] == ‘\\‘)                break;        }        //判斷是不是相同        i--;        int equal = 0;        for(int j = 0;j < kase; j++)        {            if(strcmp(store[j],&s[len - 1 -i]) == 0 &&  row == rows[j])            {                equal = 1;                counts[j]++;                break;            }        }        //如果不相同        if(!equal)        {            strcpy(store[kase], &s[len - 1 -i]);            rows[kase] = row;            counts[kase]++;            kase ++;        }        for(int j = 0; j < kase; j++)        {            cout << store[j] << " " << rows[j] << " " << counts[j] << endl;        }    }    return 0;}

轉自:http://m.blog.csdn.net/blog/to_xidianhph_youth_2010/37419629

看了好多實現錯誤記錄功能的例子,這篇寫的是最基礎的。。大牛好厲害(我太菜了。。)。

[轉]錯誤記錄

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.