寻找第四个出现了两次或者两次以上的字符串

来源:互联网 发布:微信软件源 编辑:程序博客网 时间:2024/06/04 18:30

    今天去了某个搞量化投资的公司面试实习生,坐了一个多小时的地铁终于找到了地方,唉,上海今天的空气质量又 爆表了,懒得吐槽了。到地点后,直接给了一张纸,有一道题,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 。

0 0
原创粉丝点击