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