帮我看看这代码什么问题,题目是利用KMP算法搜索一个TXT文档里的数据

C语言 码拜 6年前 (2015-05-11) 293次浏览 0个评论
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <windows.h>
#include <time.h>

#define MAX 101;

int  kmp( char *A ,char *a)
{
	/*函数功能:用kmp算法进行搜索*/
	int next[MAX] = {0} ;
	int n,m;
    
    int lA = 0,la = 0 ;
    
    int x = 1,y = 0 ;
    int i,j,k ;
    next[1] = 0 ;
    
   
     i = 1 ;
     j = 1 ;
    
	lA = strlen(A);
    la = strlen(a);
    for(m=la-1; m>= 0 ;m --)
    a[m+1] = a[m] ;
    for(m=lA-1; m>= 0 ;m --)
    A[m+1] = A[m] ;
    
    
     
    while ( x <= la)                                         /*核心部分*/
     {
           if( a[x] == a[y] || y == 0 )
           {
               x ++ ;
               y ++ ;
               if( a[x] == a[y])
               next[x] = next[y];
               else
               next[x] = y ;
           }
           else
           y = next[y] ;
     }


     while ( i<=lA && j <= la )
     {
           if(A[i] == a[j] ||  j == 0 )
           {
                   i ++ ;
                   j ++ ;
           }
           else
           j = next[j] ;
     }
     
     if ( j> la)
     return i-j+1 ;
     else
     return -1 ;


}









int main(void) 
{
char *DNA;
char ln[200];
char st[200];
char temp[101];
FILE *f;
clock_t start, finish;                                    /*需要时间计算(可删除)*/
int i,j,n;
double needtime;

	start = clock();                   
    DNA = (char *)calloc(1000000*200,1);
    f = fopen("solexa_100_170_1.txt","r");
    i = 0;
    while (1) 
	{
        if (NULL==fgets(ln,200,f)) break;
        if (1==sscanf(ln,"%199[ACGT]",st))
		{
            strcpy(DNA+i*200,st);
            i++;
            if (i>=1000000) break;
        }
    }
    
	scanf("%s",temp);
	for(i=0;i<1000000;++i)
	{
	    j = kmp(DNA+200*i,temp);                           /*调用Kmp函数*/
		if ( -1 == j)
        printf("Not Soulation!!! ");
        else
		printf("(%d,%d)\n",i,j);
	}
    fclose(f);
    n = i;

    for (i = 0;i<n;i++)                             
	{
	    
	}   

    free(DNA);  
	finish = clock();  
    needtime = (double)(finish - start);  
    printf("%f ms\n", needtime ); 
	system("pause");  
	return 0;
}

主函数里调用txt文档




在线着急等!
100分
你要说明你的算法出了什么问题, 或者报了什么错才行,   其他人才好帮助你.

1. 调试看文件读取完成后, 文件内容是否都读取到.
2. 确认你的KMP算法工作正常, 即写一段代码来验证你的KMP能正常的匹配串.

测试驱动
什么问题?

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明帮我看看这代码什么问题,题目是利用KMP算法搜索一个TXT文档里的数据
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!