91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 4.76 KB
    文件類型: .rar
    金幣: 1
    下載: 0 次
    發(fā)布日期: 2024-09-22
  • 語言: 其他
  • 標(biāo)簽: KMP算法??模式匹配??

資源簡介

我自己用C語言寫的,用了KMP算法,實現(xiàn)了從文件中查找字符的功能。

資源截圖

代碼片段和文件信息

#include?
#include?

#define?MAXSTRLEN?255?????????//最大串長
typedef?char?SString[MAXSTRLEN+1];???//串的定長順序存儲表示
int?next[MAXSTRLEN];????????????//KMP算法中用到的next


void??get_next(SString?Tint?next[])???//求next值
{
int?j=1k=0;
next[1]=0;
????while(j {
if(k==0||T[k]==T[j])??
{
++j;++k;?
if(T[j]!=T[k])?next[j]=k;
else?next[j]=next[k];
}
else?k=next[k];
}
}


int?Index(SString?SSString?Tint?pos)??//KMP算法
{
int?i=posj=1;
???while(i<=S[0]&&j<=T[0])
???{
???if(j==0||S[i]==T[j])?{++i;++j;}
???else
???j=next[j];
???}
???if?(j>T[0])?return?(i-T[0]);
???else
???return?0;
}

int?lenth(SString?str)????//求串長
{
int?i=1;
while(str[i])?i++;
return(i-1);
}

void?find(char?name[]SString?keys)??//查找函數(shù),該函數(shù)是整個程序最重要的部分,對于輸入的每一個
{????????????????????????????????????//要查找的關(guān)鍵字,從小說文件中逐行讀取字符串查找
SString?text;??//存放從小說文件讀取的一行字符串??????
int?i=1j=0k;???//i用于存放行號,j用于存放列號k用于輸出格式的控制
FILE?*fp;
if?(!(fp=(fopen(name“r“))))??//打開小說文件
{
printf(“Open?file?error!\n“);
exit(0);
}

????keys[0]=lenth(keys);????????//求關(guān)鍵字的長度
get_next(keysnext);????????//求模式串(關(guān)鍵字)每一個字符對應(yīng)的next值
printf(“%s\n“&keys[1]);????//打印關(guān)鍵字
while?(!feof(fp))????????//如果還沒到小說文件末尾
{
k=0;
fgets(&text[1]MAXSTRLENfp);?????//從小說文件中讀取一行字符串,存入text串中
text[0]=lenth(text);??????????????//求讀入的串的長度

j=Index(textkeysj+1);????????//調(diào)用KMP算法,統(tǒng)計關(guān)鍵字在該行出現(xiàn)的位置,若匹配不成功則返回0
if?(j!=0)
{printf(“row=%dcol=%d“ij);?k++;}???//若匹配成功則打印行號和列號
while(j!=0)?????????//若該行找到了關(guān)鍵字,則繼續(xù)尋找看是否還能匹配成功
{
j=Index(textkeysj+1);??//調(diào)用KMP算法從剛找到的列號后一字符起匹配
if?(j!=0)?????????
{printf(“%d“j);?}?//若匹配成功,則打印列號
}
i++;??//行號加1,在下一行中尋找
if?(k) printf(“\n“); //輸出格式控制
}

}



void?main()
{
char?name[50];???//存儲輸入的小說路徑字符串
SString?words[10];???//定義字符串?dāng)?shù)組,用于存儲輸入的關(guān)鍵字
int?ni;
printf(“Please?input?the?name?of?the?novel:\n“);
scanf(“%s“name);
printf(“How?many?words?do?you?want?to?find?(n<10)\n“);
scanf(“%d“&n);
printf(“Please?input?the?words?you?want?to?find:\n“);
for?(i=0;i scanf(“%s“&words[i][1]);??//用戶一次性輸入要查找的關(guān)鍵字,words[i][0]用于存放字符串的長度

for?(i=0;i find(namewords[i]);????//對于每一個關(guān)鍵字,調(diào)用查找函數(shù)進行查找統(tǒng)計



}


?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????2619??2009-03-07?21:10??文學(xué)研究助手\文學(xué)研究助手.cpp

?????文件??????12800??2009-05-02?19:33??文學(xué)研究助手\要求.doc

?????目錄??????????0??2009-05-02?19:34??文學(xué)研究助手

-----------?---------??----------?-----??----

????????????????15419????????????????????3


評論

共有 條評論