2013-01-19 148 views
0

此代碼是索引文件的較大代碼的一部分,並對每個文件中的單詞進行標記,以便您可以在大量文件中搜索某個單詞。 (如谷歌)搜索文件?

此功能應該搜索您的文件,找到您想查找的單詞。但我不完全明白它是如何工作的!

有人可以請解釋這段代碼是做什麼的,它是如何做到的?

另外,我有幾個問題: 1)「infile」究竟是什麼? 2)內置函數c_str()是做什麼的? 3)爲什麼變量「currentlineno」從1開始?文件的第一行不能從0開始? 4)++ x和x ++有什麼區別? 5)條件「currentlineno < lineNumber」和「currentlineno!= lineNumber」之間有什麼區別?

這是代碼:

void DisplayResult(string fileName, int lineNumber) 
{ 
ifstream infile(fileName.c_str(), ifstream::in); 

char line[1000]; 
int currentlineno = 1; 

while(currentlineno < lineNumber) 
{ 
    infile.getline(line, 1000); 
    ++currentlineno; 
} 
infile.getline(line, 1000); 
cout<<endl<<"\nResult from ("<<fileName<<"), line #"<<lineNumber<<": "<<endl; 
cout<<"\t"<<line; 

infile.close(); 
} 
+0

嗯。其中一些問題聽起來像是作業問題。但如果這是一個課堂練習,你應該尋找更好的課程。 – JoergB

+0

不,這不是功課。 – user1910524

回答

0

此功能顯示相應行號通過參數的行。

1/INFILE允許打開一個文件作爲在放流:http://www.cplusplus.com/reference/fstream/ifstream/

2/c_str()許可證傳遞給串結構以簡單的char *(char數組)。它是C語言中的結構用法,它解釋了方法名稱爲「c_str」的原因。在C++中,我們通常使用比char *多的字符串,因爲它非常簡單。

3 /爲什麼currentlineno從1開始?該功能在給定行號之前讀取文件內容。再讀一遍來顯示想要的行。

4/++ x是預增量,x ++是後增量。 當您使用++ x時,x在使用之前遞增,否則x ++會在x後遞增。

int x = 1; 
cout << ++x; // display 2 
x = 1; 
cout << x++; // display 1 

5 /看運營商:http://www.cplusplus.com/doc/tutorial/operators/

+0

爲什麼我們要打開文件作爲輸入流?我們正在做的就是搜索。我們只想添加輸入! – user1910524

+0

讀取文件對應於程序中的一個條目。要找到相應的行,請嘗試打開輸入流,然後讀取行,最後關閉文件。 – jbouny

+0

謝謝@bondika – user1910524

0

1)精確地 「INFILE」 什麼?

ANS ::構建對象和可選的打開文件。 Link

2)內置函數c_str()做了什麼?

ANS ::需要在std :: string類中獲得存儲 的文本的const char *表示。 Link

3)爲什麼變量「currentlineno」從1開始?文件的第一行不能從0開始?

ANS ::取決於函數DisplayResult的第二個輸入參數。

4)++ x和x ++有什麼區別?

ANS ::見this。可能你可能聽說過增量和增量。

5)條件「currentlineno < lineNumber」和「currentlineno!= lineNumber」之間的區別是什麼?

ANS :: currentlineno的值在條件爲currentlineno < lineNumber時不應超過lineNumber的值。當條件爲currentlineno != lineNumber時,currentlineno的值可能會超過或可能小於lineNumber的值,但不應等於lineNumber的值。

+0

當談到文件時,我有點兒是初學者。所以,請不要在意我的意思時,說一個infile「Construct對象和可選的打開文件」。 你的意思是說,c_str()標記文本中的字符串? – user1910524

+0

如果您嘗試使用C++進行編碼,您需要進行一點閱讀,例如如何構建對象以及如何構建它們。如需快速參考ifstream,請轉至http://www.cplusplus.com/reference/fstream/fstream/ – Abhineet

+0

如果提供的解決方案已澄清您的疑問,您可以接受答案:-D – Abhineet

0

此功能不搜索詞。

它需要輸入一個文件名和一個行號。它試圖找到並閱讀該行。

輸出開始於一個行指出:「從(fileName),線#lineNumber其結果是:」 其次是由製表縮進和隨後發現線內容的文本。這第二行輸出是不完整的(後面沒有換行符)。

所找到的內容是空的,如果文件具有具有小於線路的請求數量,或者如果任何所請求的行之前的行的具有多於999個字符。 如果請求的行有超過999個字符,它會被截斷爲999個字符。

其他問題:

1)infile是自動存儲持續時間和類型std::basic_ifstream<char, std::char_traits<char>>,其被用於從在fileName命名的文件讀取初始化的函數作用域的對象。

2)內置於標準庫字符串類中的成員函數c_str()返回一個指向字符串內容的指針,作爲不可修改的nul結尾的字符數組,這是C中用於字符串的典型格式const char *)。由於歷史原因,基於文件的標準庫流採用這種格式的文件名參數。

3)人類通常會從1開始計算行數。這是用於lineNumber參數的慣例。所用的算法必須與此匹配。局部變量currentlineno用於表示「要讀取的下一行的編號」。因此必須使用1進行初始化。 (考慮到變量的名稱,這有點令人困惑。)其他實現可以用0初始化行計數器 - 對於大多數C++程序員來說確實很自然。

4)請參閱C++的任何教科書或在線參考。尋找「預增」(++x)和「後增」(x++)操作員。它們具有相同的副作用(增量x),但表達式的值不同。如果你不使用結果它們是相等的(對於基本類型)。 C++程序員通常更喜歡預先增量,因爲它通常可以更高效地爲用戶定義的類型實現。

5)更基礎的教科書問題。 a < b測試爲小於關係,a != b測試不等式。

注:所有答案假設使用的類型與標準C++庫,我。e適當包括<string><iostream>標題和必要的using指令或聲明。