2016-11-30 69 views
0

我不確定如何在閱讀文本文件時閱讀特定的信息點。我想要做的是。從它們的輸入從.txt文件爲C++查找和驗證特定用戶ID

  1. 獲得用戶ID(CIN >>用戶ID)
  2. 的ID程序檢查它是否存在於數據庫中(讀txt文件)
  3. 到下一部分
  4. 如果ID存在,繼續進行
  5. 否則,COUT錯誤消息

    //Example text from the file:

    12345678 23456789 34567890 45678901 etc. etc. etc.

在這裏,如果用戶輸入「12345678」,我想知道如何讓C++只專門掃描.txt文件中的12345678。因此生成「標識已驗證。」「消息。或者有人可以慷慨地指導我進行適當的聯繫嗎?

+0

看看http://www.cplusplus.com/doc/tutorial/files/,它會告訴你如何打開一個文件並循環遍歷它。您要循環播放直到找到與輸入的用戶ID匹配的行。 –

+0

你的建議似乎是最好的工作! :) –

回答

0

你將要使用std :: string :: find。

例子:

if (fullString.find(partOfString) != std::string::npos) { 
    std::cout << "found!" << endl; 
} 

所以在你的榜樣,文本文檔的你上線將是fullString,進入用戶ID將是partOfString。你也可以直接與

if (userString == lineFromFile) 
{ 
    //do something 
} 
+0

你的第一個例子會匹配「345」到「12345678」,不是嗎?這可能不是想要的。 std :: string :: compare可能是更好的選擇(http://www.cplusplus.com/reference/string/string/compare/) –

0

「專門掃描.txt文件中的123456」 - 你不能。你有什麼是文本文件,而不是數據庫。如果你的文件很大,我會爭辯說解決方案是使用一個數據庫(例如sqlite)並讓它爲你生成一個索引。然後,您可以查詢數據庫以查找與xyz匹配的任何用戶標識。

+0

這個答案令人誤解。如果每行都有一個ID爲一個文本文件,當然,您可以通過迭代來檢查它是否符合要查找的ID。當然,一個合適的數據庫可能是一個更好的解決方案,但對於OP的目的來說可能是矯枉過正。 –

+0

根本沒有誤導,因爲OP已經明確表示他們只想掃描他們感興趣的一行 - 呃,這是不可能的,如果是的話,那麼您就會創建一個市場領先的數據庫。 – UKMonkey

+0

也許OP可以澄清 - 我認爲他們的總體目標只是檢查文件中是否存在ID。但是,是的,正如你所說的,如果沒有閱讀所有文件(直到找到匹配的行,如果有的話)是不可能的。問題在於如何閱讀和解析文本文件,所以更好的答案是給出一些提示,說明如何做到這一點,以及限制是什麼,而不僅僅是說「你不能」 –

0

假設你知道如何open the file using fstream什麼都沒有,你可以做一些像while循環。

ifstream yourFile; 
int userID, wantedID; 
bool found = false; 

//open file 
while(yourFile >> userID && found == false){ //this says while there is numbers that can be put into UIN, do this. This way it won't keep trying after it has run out of numbers, and will also stop if/when it is found, whichever comes first. 
    if(UserID == wantedID){ 
     found = true; 
    } 
} 

那麼這將允許做什麼是搜索整個文件的ID,以及什麼時候發現停止搜索。然後,你可以用它來做你想做的事情,儘管在使用userID的時候,你也很可能仍然想檢查找到的布爾值,以防它找不到並且用完數字。