尋找第四個出現了兩次或者兩次以上的字符串

    今天去了某個搞量化投資的公司面試實習生,坐了一個多小時的地鐵終於找到了地方,唉,上海今天的空氣質量又 爆表了,懶得吐槽了。到地點後,直接給了一張紙,有一道題,10分鐘作答。

    題目大概是這樣的:在“abc abf abc str jslt str abf 7788 7788 fasd fkjl unnid ...”中找到第四個出現兩次或者兩次以上的字符串。當時一看就慌了,主要是好久沒有手寫代碼了,一開始以爲要完整的寫出程序,而我恰好關於文件錄入的函數記不大清了(後來證明只要寫僞代碼就好了),時間又比較緊,只好飛快的搜索大腦,絞盡腦汁,想出了一個方案,思路雖然是對的,當時解答也沒什麼問題,但是回來之後想了想,還是有許多小細節錯誤,所以就在機器上又完整的寫了一遍,跑了一下,代碼如下:

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

using namespace std;

struct charnum {
        char str[10];
        int num;
};

int main()
{
        FILE *fp = fopen("data.txt", "rw+");
        char tmp[10] = {0};
        struct charnum tmpstr;
        map<int, struct charnum> mystr;
        int num = 0;
        int cou = 0;
        bool found = false;
        while (fscanf(fp, "%s", tmp) != EOF && !found) {
                map<int, struct charnum>::iterator it;
                for (it = mystr.begin(); it != mystr.end(); it++) {
                        if (strcmp(it->second.str, tmp) == 0) {
                                it->second.num++;
                                if (it->second.num == 2) {
                                       cou++;
                                       if (cou == 4) {
                                                printf("The 4th str: %s", tmp);
                                                found = true;
                                                break;
                                       }
                                }
                        }
                }
                if (it == mystr.end()) {
                        memcpy(tmpstr.str, tmp, sizeof(tmp));
                        tmpstr.num = 1;
                        printf("%s\n", tmp);
                        mystr[num++] = tmpstr;
                }
        }
        fclose(fp);
}
data.txt中的數據就是abc abf abc str jslt str abf 7788 7788 fasd fkjl unnid 。

發佈了36 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章