对文件内的字符串检索

FLY_FOX 2000-12-29 03:31:00
请高手指点,50分奉上。
请问如何打开一个文件并对其中的字符串进行检索?如:
FILE *FP;
if(!(fp=fopen("book.txt","rb"))){
exit(1);
}
else
{
//进行字符串检索,如:要找出单词FILE,然后输出
}
...全文
167 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyqryq 2000-12-30
  • 打赏
  • 举报
回复
用字符串匹配算法或KMP算法。
FLY_FOX 2000-12-29
  • 打赏
  • 举报
回复
OK,此程序弄得我头都大了,主要是内容太多,关系到样式、参数的分离等等。具体就不说了。
50分太少--另行加分。
如果写出的文本内容太多(注意:不是在WINDOWS的窗口中,类似DOS下调用GRAPHICS.H吧)
用键盘实现文本的滚动,应该如何做?
我曾经考虑过用指针来做到这一点,但不知道对速度会不会有影响?
ed9er 2000-12-29
  • 打赏
  • 举报
回复
int fd, r;
char c, *p;
char *str = "abcac"; // as you wish
int next[] = { -1, 0, 0, 0, 1}; // KMP

if( -1 == (fd=open( "book.txt", O_RDONLY )) )
exit(1);

r = read( fd, &c, 1 );
p = str;

while( r ) {
if( *p == c ) {
p++;
if( !*p ) {
printf( "found : %s\n", str );
break;
}
}
else if( p != str ) { // do not use "-1"
p = str + next[p-str];
continue;
}
r = read( fd, &c, 1 );
}

//如果str里面有中文的话,嘿嘿,就要拆成两个byte来做next数组,看一下数据结构书吧,上面有做next的程序,懒得找给你了
lu_yb 2000-12-29
  • 打赏
  • 举报
回复
如果有中文要用unsigned char来读取,如果读到
的第八位置位了,也就是其值大于128就是中文了,
这时要和下一字节一起两位一起判断.
ColdSpring 2000-12-29
  • 打赏
  • 举报
回复
if(!(fp=fopen("book.txt","rb"))){
exit(1);
}
else
{
while(文件结束)
{ 文件放入字符串str1}
if (strstr(str1,"查询子串")!=NULL) 存在此子串;
else 没有;
}
中文一样的,中文部过是双字节的字符而已
FLY_FOX 2000-12-29
  • 打赏
  • 举报
回复
如果其中有中文?
chenf 2000-12-29
  • 打赏
  • 举报
回复
保证是文本文件!

CFile f("book.txt",CFile::modeRead);
CArchive a(&f,CArchive::load);
CString s;
DWORD l=f.GetLength();
a.Read(s.GetBufferSetLength(l),l);
int pos=s.Find("FILE");
ColdSpring 2000-12-29
  • 打赏
  • 举报
回复

我来试一式
FLY_FOX 2000-12-29
  • 打赏
  • 举报
回复
To ColdSpring:
我实验过,不过出了问题,请给出一段源代码好吗?
ColdSpring 2000-12-29
  • 打赏
  • 举报
回复

先把文件内容读出到一个字符串中,然后再检索

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧