2016-11-30 68 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的时候,你也很可能仍然想检查找到的布尔值,以防它找不到并且用完数字。