某外企C++面试题

来源:互联网 发布:网络cv设备 编辑:程序博客网 时间:2024/06/08 08:09

我见过一个外企C++面试题,我当时也没做出来,经过这几天思考,有了点思路,现在给大家分享。注意,原题是英文的。

题目:给一个文本文件,该文件中包含一篇文章,要求写代码统计出里面长度最长的10个单词,并且记录打印出该单词所在的段落以及内容。

 

我刚看到题目的时候,认为这是一个词频统计的问题,所以想了各种方法都达不到好的效果,经过这几天思考,终于写出来这个题目的解法,特记录如下。

#include <iostream>#include <vector>#include <algorithm>#include <fstream>#include <map>using namespace std;struct word{string content;int graph;word(string c,int g):content(c),graph(g){}};int cmp(word p1,word p2){    return p2.content.size() < p1.content.size();}int main(){    fstream fs("d:/demo.txt");    fs >> noskipws;    char c;       // each character.    string str;   //each word    long pos=1;   // graph    vector<word> vect;   // all word.    map<int,string> graph;             // graph,string mapping.    string str_graph;    while(!fs.eof())    {        fs>>c;        if(fs.eof())break;        if(c == '\n')continue;        if(c == ' ' || c == ',' || c == '.' || c == ':')        {            word w(str,pos);            vect.push_back(w);            str.clear();            str_graph.append(&c,1);            if(c == '.')            {                graph.insert(make_pair(pos,str_graph));                str_graph.clear();            }        }else{            str.append(&c,1);            str_graph.append(&c,1);        }        if(c == '.')        {            ++pos;        }    }    sort(vect.begin(),vect.end(),cmp);    vector<word>::iterator begin = vect.begin();    while(begin!=vect.end())    {        word wo = *begin;        cout << wo.content << "--------------->" << wo.graph << endl;        ++begin;    }    map<int,string>::iterator begin1 = graph.begin();    while(begin1!= graph.end())    {        pair<int,string> pa = *begin1;        cout << pa.first << "----------->" << pa.second << endl;        ++ begin1;    }    return 0;}

  

逐个字符进行读取,并过滤掉其中的标点符号,另外,专门声明一个struct用来记录这个单词以及单词对应的段落编号。在逐个字符读取时,同时也记录每一个段落的内容。另外,我这里用了一个文件进行测试,文件内容如下:

hi guys:where are you.
haha, have a guess.
welcome,lucy,welcome to home.

我分析了一下,里面主要是需要创建一个对象,另外需要留意使用sort函数,且自己实现compare函数。 上面代码可以优化空间很大,仅供参考即可。

打印结果就不记录了,上面这个程序在我电脑上运行过,已经统计出来了。

 

原创粉丝点击