ある外資系企業のC++面接問題

2628 ワード

私は1つの外資系企業のC++面接の問題を見たことがあって、私はその時もしていなかったで、この数日の思考を経て、少し考えがあって、今みんなに分かち合います.原題は英語です.
タイトル:テキストファイルをあげて、このファイルの中に1篇の文章を含んで、コードを書いて中の長さの最も長い10個の単語を統計することを要求して、しかもその単語の所在する段落と内容を記録して印刷します.
 
私はちょうどテーマを見た時、これは1つの語の周波数の統計の問題だと思って、だから各種の方法を考えてすべて良い効果に達することができなくて、この数日の思考を経て、ついにこのテーマの解法を書いて、特に以下のように記録します.
#include 
#include 
#include 
#include 
#include 

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 vect;   // all word.

    map graph;             // graph,string mapping.
    string str_graph;
    while(!fs.eof())
    {
        fs>>c;
        if(fs.eof())break;
        if(c == '
')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::iterator begin = vect.begin(); while(begin!=vect.end()) { word wo = *begin; cout << wo.content << "--------------->" << wo.graph << endl; ++begin; } map::iterator begin1 = graph.begin(); while(begin1!= graph.end()) { pair 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関数を実現する必要があります.上のコードは、参照用だけで十分なスペースを最適化できます.
印刷結果は記録されません.上のプログラムは私のパソコンで実行されました.統計されています.
 
転載先:https://www.cnblogs.com/lucy-lizhi/p/7449151.html