如何在文件中搜索最好,最简单的方法?

时间:2012-01-22 16:01:35

标签: c++ search file-io

有人可以告诉我这是一个通过id搜索帐户的好方法,并输出关于他的所有数据吗?如果没有,哪种方式最好?

我有这个:

void account::showacc() {
  ifstream inFile;
  inFile.open("account.dat",ios::binary|ios::in|ios::app);
  int accnum1,n;
  cout<<"Enter account num: ";
  cin>>accnum1;
  n=test();

  for(int i=0;i<n;i++)
  {
    inFile.read((char*)&acc,sizeof(acc));
    if(accnum==accnum1)
    {
      cout<<"account number is: "<<accnum<<endl;
      cout<<"The possesor's name is :"<<name;

    }
  }
  inFile.close();
}

test()是:

int account::test()
{
  ifstream inFile;
  inFile.open("account.dat",ios::binary|ios::in|ios::app);
  inFile.seekg(0,ios::end);
  int n;
  n=inFile.tellg()/sizeof(acc);
  inFile.close();
  return n;
}

3 个答案:

答案 0 :(得分:2)

嗯,这会起作用,但它会变慢......取决于你的文件有多大,以及你的程序运行多长时间(即,如果它是一个持久的程序运行在背景或某种类型的服务),对文件进行内存映射,和/或将整个文件读入std::stringstream,然后在内存中扫描存储的文件会更好。同样,这将取决于您的文件有多大,以及阅读程序的持久性。如果它是一个巨大的文件,你的程序只运行一次然后退出,那么是的,你当前的方法是可以的。

答案 1 :(得分:1)

您可以通过更改for循环来提高效率。事实上,即使您找到了帐号,看起来您也会浏览整个文件。假设没有重复的数字,您应该将其设置为在找到数字时终止。

答案 2 :(得分:1)

根据您的使用情况,您可能最好使用sqlite之类的数据库引擎,并让它负责搜索您。 Sqlite作为C ++库存在,您可以在程序中使用它。