C++ 如何能搜索TXT文件里某行中的字匹配

唔,感觉有点不大熟,我用的是fstream函数,我C++新手,在做C++课程设计通讯簿管理,添加联系人的信息一行一行到TXT文件模块弄好了,但是查询联系人用姓名或学号,我想做到搜到某行的名字或学号匹配,便输出该行所有信息,我为此烦恼半天了~希望能帮忙,谢谢!能贴出个例子吗?

使用FILE指针
1、先用fopen打开文件
2、再seek到文件结尾,seek会返回文件的长度,动态分配(长度+1)个字符大小的内存,用fread一次读入整个文件的内容到刚刚分配的内存。
3、字符串一般换行都是用的'\n',可以遍历数组,将每行数据提取出来。
4、在每行字符串中搜索你想要找的字符或者字符串,也就是你说的匹配。

如果可以使用mfc话会更方便,CStdioFile类能满足你的要求,ReadString直接读入一行数据。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-14
#include<fstream>
#include<iostream>
using namespace std;
void SearchID(char *ID,char * Filename)
{
char ch[200];
bool judge=false;
ifstream in(Filename);
while(in.getline(ch,200))
{
if(strstr(ch,ID)!=NULL)
{
judge=true;
printf("%s\n",ch);
}
}
if(!judge)
printf("Can Not Search This ID :%s\n",ID);
in.close();
}
int main()
{
char Temp[40];
scanf("%s",Temp);
SearchID(Temp,"IdRecord.txt"); //学生信息存放处,IdRecord.txt 为文件名

}本回答被提问者采纳
第2个回答  2011-01-14
懒得写了,说个思路吧:
1.先把文件打开,把里面的每行数据读出来,放到一个数组中,然后关闭文件.
2.用一个循环比较数组中每行数据是否以"61"开头,是则输出,否则继续下次循环,直到所有数据循环完即可.
第3个回答  2011-01-13
如果数据量不大,就一次性把txt文件中的内容全部读到内存里,也就是开一个struct的数组存储所有记录的信息,然后遍历整个数组,如果发现匹配,就输出整条记录。
如果数据量很大,就一边读磁盘一边匹配。

大概的框架是这个样子的。

struct student
{
string name;
string id;
……
};

struct list[1000000];

ifstream in( file.c_str() );
string tmp;

//小数据量
i = 1;
while(in>>tmp){
struct one = {……};
list[i] == one;
++i;
}

//大数据量
while(in>>tmp){
if(tmp == object){
输出该记录
}
}
第4个回答  2011-01-14
我想你主要的问题是在格式的输入上面,用sscanf函数可以解决你的问题。这是个C函数但是C++一样用,好用就行。
相似回答