2

カーソルが特定の位置にあるテキスト ファイルを開いています。カーソルの行番号を見つける必要があります。次のアプローチのうち、パフォーマンスの観点から最適なものはどれですか?

1) 現在の位置を変数 'pos' に格納し、ファイルの先頭から 'pos' までのすべての '\n' 文字を検索します。

ifstream in("file.txt");
// move anywhere in the file
int lineNum = 0;
std::string line;
istream::pos_type pos = in.tellg();
in.seekg(0);
while ( std::getline(in, line) ) {
   ++lineNum;
   if(in.tellg() >= pos) break;
}

2) 別の ifstream を使用して同じことを行います。

3) 他に何かありますか?

4

2 に答える 2

0

API は便利なツールです

から: http://www.cplusplus.com/reference/istream/istream/getline/

istream& getline (char* s, streamsize n ); 
istream& getline (char* s, streamsize n, char delim );

行を取得 ストリームから文字をフォーマットされていない入力として抽出し、抽出された文字が区切り文字になるか、n 文字 (終端のヌル文字を含む) が s に書き込まれるまで、それらを c-string として s に格納します。

区切り文字は、最初の形式では改行文字 ('\n') で、2 番目の形式では delim です。入力シーケンスで見つかった場合、入力シーケンスから抽出されますが、破棄され、s には書き込まれません。

そのため、最適な方法は、単純に while ループを繰り返してカウンターをインクリメントすることです。関数が自動的に実行するため、改行を検索する必要はありません。

于 2013-04-08T12:26:15.793 に答える