C语言 读取一个中文文本文件中的一行,和另一个中文文本文件对比看里面有没有这行的这个词

两个文本文件都是中文的 每行一个词 要读取文件1的一行的词,看看文件2里有没有1里读取的这个词。文件2大概有2000多行。。。。。。。。。。。。。。。。。。。。。。。。。。。
求大神帮助!

第1个回答  2013-06-15
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
char a[10000],b[10000];
int pre[10000];
void prepare(char *t){
  int j=pre[1]=0;
  int m=strlen(t+1);
  for (int i=2;i<=m;i++){
    while (j&&t[j+1]!=t[i]) j=pre[j];
    pre[i]=(t[j+1]==t[i])? ++j : j ;
  }
}

int KMP(char *a,char *b){
 int j=0;
 int cnt=0;
 int n=strlen(a+1);
 int m=strlen(b+1);
  for (int i=1;i<=n;i++){
    while (j&&b[j+1]!=a[i]) j=pre[j];
    if (b[j+1]==a[i]) j++;
    if (j==m){
      cnt++;
      j=pre[j];
}  
   }
  return cnt;
}
int main(){
  freopen("text1.txt","r",stdin);
  freopen("result.txt","w",stdout);
  scanf("%s",b+1);
  prepare(b);
  int ans=0;
  freopen("text2.txt","r",stdin);
  while (scanf("%s",a+1)!=EOF) ans+=KMP(a,b);
  if (ans) printf("Words existed in text2 %d times\n",ans);
  else puts("Not found!");    
  fclose(stdout);
  system("notepad.exe result.txt");
  fclose(stdin);  
  return 0;    
}

建议用KMP算法,具体算法可以看matrix67的blog。

http://www.matrix67.com/blog/archives/115

第2个回答  2013-05-28
fopen()分别打开两个文件fp1,fp2
buffer1[1024];
buffer2[1024];
fgets();用它读fp1,读到buffer1里
while ();循环读取直到文件尾
fgets();用它读,读到buffer2里
每次都strcmp();
如果相等就break,
不相等就继续读本回答被网友采纳
相似回答