C ++は、テキストに応じてインデックス化



#include "stdafx.hを"
の#include <iostreamの>
の#include <fstreamの> 
の#include <設定> 
書式#include <マップ> 
書式#include <文字列> 
の#include <CCTYPE> //はisalpha、isupper、TOLOWER 
の#include <cstdlib> / /退出 


名前空間stdを使用。 


静的INT s_lineNum = 1; //静的行番号  


int型のmain(int型ARGC、CHAR * ARGV []) 

IF(ARGC <3) 

COUT << "使用:" <<のargv [0] << "INFILE" << "OUTFILE" << ENDL。 
裁判所未満<<「Englishfileから単語リストを生成します」 
<<「各単語は、それが発生した行の数と、出力resulttoファイルが続きます。」<<てendl; 

そうしないと 

//一般的な単語 
ストリングcommWord [13] = { ""、 ""、 "および"、 "ある"、 "である" "で"、 "の"、  
「または」、「その」、「」、「この」、「から」}「持っています」。 


セット<ストリング>無視する(commWord、+ 13 commWord); // commonwordsを無視 
<整数> LINENUM設定します。 
文字列の単語; // INFILEから抽出された単語を含みます 
マップ<文字列、セット<整数>>ワードリスト; //准ワードwithlineNum 
ペア<マップ<文字列、セット<整数>> ::イテレータ、ブール値> PR。 
マップ<文字列、セット<整数>> ::イテレータitWord。 
<整数> ::イテレータitLine設定します。 


INFILEはifstream(ARGV [1]); //オープンINFILE 
もし(infile.bad()) 

COUT << "オープン "<<のargv [1] <<" エラー" << ENDL。 
出口(EXIT_FAILURE)。 



OUTFILE ofstreamの(ARGV [2])。 
もし(outfile.bad()) 

COUT << "オープン" <<のargv [2] << "エラー" << ENDL。 
出口(EXIT_FAILURE)。 



char型の温度; 
しばらく(infile.good()) 

TEMP = infile.get(); //は、charを取得します 
しばらく(isalphaは(一時)) 

もし(isupper(TEMP)) 

TEMP = TOLOWER(TEMP)。 

word.append(1、TEMP)。 
TEMP = infile.get(); //はすべてnewCharを取得します  

//ではない一般的な単語や空ではありません 
(ignore.count(ワード)== 0 && word.size()!= 0)の場合 

lineNum.insert(s_lineNum); //それは新しい単語をISA場合LINENUMに行番号を挿入 
// firstmemberイテレータであり、ペアを返し、第二はtheinsertionが成功したか否かを示すブール型であります 
PR = wordlist.insert(対<文字列、セット<整数>>(単語、LINENUM))。 
//そのキーの順序で同等の価値を持っていたマップすでに含まれているanelement 
もし(pr.second == false)を 

単語リスト[単語] .insert(s_lineNum); //ワードとペアsetcontainerに行番号を挿入 
}                

word.clear(); 
lineNum.clear(); 
もし(一時== '\ n' は) 

s_lineNum ++; 




// itWord点対<文字列、セット<整数>>、firstmemberは単語であり、第二は、ある行番号  
用(itWord = wordlist.begin();!itWord = wordlist.end(); ++ itWord) 

//設定された出力フォーマット 
outfile.setf(ios_base ::左、ios_base :: adjustfield)。 
outfile.fill( ' - '); 
outfile.width(34)。 
OUTFILE << itWord->まず、
OUTFILE << "「; 


用(itLine = itWord-> second.begin(); itLine = itWord-> second.end();!++ itLine) 

OUTFILE << * itLine << '「; 

OUTFILE <<てendl; 



infile.close(); 
infile.open(ARGV [2])。 
coutの<< infile.rdbuf(); //ストリームバッファ、出力ファイルを印刷 
infile.close(); 
outfile.close(); 

マップ<整数、文字列> SS。
ss.insert(対<整数、文字列>(6、 "AA"));
ss.insert(対<整数、文字列>(4 "ZZ"));
ss.insert(対<整数、文字列>(5、 "GG"))。
マップ<整数、文字列> ::イテレータPT。
用(PT = ss.begin();!PT = ss.end(); ++ PT)
{
coutの<< PT->二<<てendl;


}




//システム(「休止」)。 
0を返します。 
}
公開された12元の記事 ウォンの賞賛6 ビュー20000 +

おすすめ

転載: blog.csdn.net/huaweizte123/article/details/51761261