KMP 刪除字串中給定的字串

2021-06-18 05:07:37 字數 1789 閱讀 1265

#includeusing namespace std;

#define nsiz 1000

int next[nsiz];

char str1[nsiz];

char str2[nsiz];

void getnext(char str, int n)

int i = 0, j = -1;

next[i] = -1;

while(i < n)

else

}}//最壞的情況o((n/m)*(n+m))

//最好的情況o(2(n+m))

//這裡用自身做標記位,若str1[i] = 0,表示第i個字元已經匹配過

//str2[i] != 0,表示第i個字元沒有匹配過

//引數str1 表示母串,str2表示刪除的子串

//返回值表示刪除的子串在母串中的個數

int kmp(char *str1, char * str2)

int flag = 1;

int count = 0;

int n2 = strlen(str2);

int n1 = strlen(str1);

int i = 0, j = 0, k = 0;

//子串長度為1時

if (n2 == 1)

else

}str1[j] = 0;

return count;

} //若子串長度比母串長度大

if (n2 > n1)

//子串長度不為1時

getnext(str2, n2);

while(flag == 1)

else

if (j == n2)

flag = 1;

}} for (i = 0, j = 0;i < n1; ++i)

}str1[j] = 0;

} return count;

}int main()

; char str2 = ;

int num = kmp(str1, str2);

printf("num: %d, after deleted: %s\n", num,str1);

char str3 = ;

char str4 = ;

num = kmp(str3, str4);

printf("num: %d, after deleted: %s\n", num,str3);

char str5 = ;

char str6 = ;

num = kmp(str5, str6);

printf("num: %d, after deleted: %s\n", num,str5);

char str7 = ;

char str8 = ;

num = kmp(str7, str8);

printf("num: %d, after deleted: %s\n", num,str7);

char str9 = ;

char str10 = ;

num = kmp(str9, str10);

printf("num: %d, after deleted: %s\n", num,str9);

char str11 = ;

char str12 = ;

num = kmp(str11, str12);

printf("num: %d, after deleted: %s\n", num,str11);

return 0;

}

去除給定字串中重複的字串

create or replace function myreplace oldstr varchar2,sign varchar2 return varchar2 is str varchar2 4000 currentindex number startindex number endindex...

字串處理 去掉給定字串中重複的字元

例如 輸入 google 輸出 gole 思路 1 建立乙個字元陣列a來存放待處理字串 2 從a的第乙個元素開始遍歷,依次對比這個元素和它後面的每乙個元素,如果不相同則處理下乙個元素,如果相同則將後面的元素整體向前移動乙個位置 3 處理完畢的a就是沒有重複元素的字串,輸出即可 include inc...

在字串中刪除特定的字元(字串)。

題目 輸入兩個字串,從第一字串中刪除第二個字串中所有的字元。例如,輸入 they are students.和 aeiou 則刪除之後的第乙個字串變成 thy r stdnts.其實這類題有個特點,字串中的字元分為兩類,就可以聯想快速排序裡的將當前的陣列分為左右兩組,其中左邊的數字小於某值,右邊的數...