資料結構課程設計 最長公共子串

2021-08-25 23:12:01 字數 1060 閱讀 6207

資料結構課程設計,由使用者輸入兩個字串串x和y,再由使用者輸入乙個任意的字串z,實現以下功能:

①如果字串z是字串x的子串,則顯示z在x中的位置並記錄,如果字串z是字串y的子串,則顯示z在y中的位置並記錄,如果z既不是x的子串也不是y的子串,則顯示不匹配。

②找出x和y的乙個最長公共子串。

③置換: 使用者輸入任意的字串去置換x和y中的子串z。

思想:首先使用kmp演算法進行匹配,快速定位子串在主串中的匹配位置。使用動態規劃的思想,求出最長公共子串,然後使用跟子串一樣長度的新字串來替換主串中的字串。

完整的**如下:

#include "stdio.h" #include "string.h" #include "stdlib.h" const int n=200; int c[n][n]; char str[n]; #define maxsize 100 typedef struct sqstring; void strassign(sqstring &str,char cstr) //str為引用型引數 void getnextval(sqstring t,int nextval) //由模式串t求出nextval值 int lcs_len(char a,char b,int c[n]) } return c[sa][sb]; } char* bulid_lcs(char a,char b) } return str; } void main() else break; } start = 0,j2=0,i=1; while(1) //求子串z在主串y中的所有位置,並記錄 else break; } if(flag1==-1 && flag2==-1) printf("無法匹配!/n"); //不匹配的時候 bulid_lcs(a,b); if(str[0]==' ') printf("這兩個字串沒有公共字串!/n"); else if(flag1==1 || flag2==1) { printf("請輸入任意的串去置換x和y中的子串z:/n"); gets(change); if(flag1==1) //替換x中的字串z { printf("x中的子串z被%s替換後為:",change); h=k=0; for(i=0;i

執行結果如下圖:

資料結構課程設計 最長公共子串

資料結構課程設計,由使用者輸入兩個字串串x和y,再由使用者輸入乙個任意的字串z,實現以下功能 如果字串z是字串x的子串,則顯示z在x中的位置並記錄,如果字串z是字串y的子串,則顯示z在y中的位置並記錄,如果z既不是x的子串也不是y的子串,則顯示不匹配。找出x和y的乙個最長公共子串。置換 使用者輸入任...

資料結構課程設計 最長公共子串

資料結構課程設計,由使用者輸入兩個字串串x和y,再由使用者輸入乙個任意的字串z,實現以下功能 如果字串z是字串x的子串,則顯示z在x中的位置並記錄,如果字串z是字串y的子串,則顯示z在y中的位置並記錄,如果z既不是x的子串也不是y的子串,則顯示不匹配。找出x和y的乙個最長公共子串。置換 使用者輸入任...

最長公共子串行 最長公共子串

1 最長公共子串行 採用動態規劃的思想,用乙個陣列dp i j 記錄a字串中i 1位置到b字串中j 1位置的最長公共子串行,若a i 1 b j 1 那麼dp i j dp i 1 j 1 1,若不相同,那麼dp i j 就是dp i 1 j 和dp i j 1 中的較大者。class lcs el...