[TOC]
### 定義
### C語言中的串實現方式
```
#include <string.h>
#include <malloc.h>
int main(void) {
//char *a = "dadsasdewe";
//char arr[11] = {"dadsasdewe"};
char *p = (char *)malloc(sizeof(char)*10);
strncpy(p,"qwe1212",8);
*(p+1) = '0';
//*(a+1)= 'q';
/*
int i;
for(i=0;i<strlen(a);i++) {
(*a) +1 = 'q';
}
*/
printf("s is %s",p);
}
```
### KMP算法
#### 基本原理

##### next數組原理

* "A"的前綴和后綴都為空集,共有元素的長度為0;
* "AB"的前綴為[A],后綴為[B],共有元素的長度為0;
* "ABC"的前綴為[A, AB],后綴為[BC, C],共有元素的長度0;
* "ABCD"的前綴為[A, AB, ABC],后綴為[BCD, CD, D],共有元素的長度為0;
* "ABCDA"的前綴為[A, AB, ABC, ABCD],后綴為[BCDA, CDA, DA, A],共有元素為"A",長度為1;
* "ABCDAB"的前綴為[A, AB, ABC, ABCD, ABCDA],后綴為[BCDAB, CDAB, DAB, AB, B],共有元素為"AB",長度為2;
* "ABCDABD"的前綴為[A, AB, ABC, ABCD, ABCDA, ABCDAB],后綴為[BCDABD, CDABD, DABD, ABD, BD, D],共有元素的長度為0。
#### 實現代碼