|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
原理:
备注:
代码:
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void str_next(int stri_1[], char strc_2[]);
- void str_next(int stri_1[], char strc_2[])
- {
- stri_1[0] = -1;
- int k = -1;
- for(int i = 1; i < strlen(strc_2); i++)
- {
- while(k > -1 && strc_2[k + 1] != strc_2[i] )
- {
- k = stri_1[k];
- }
- if(strc_2[k + 1] == strc_2[i])
- {
- k = k + 1;
- }
- stri_1[i] = k;
- }
- }
- int main()
- {
- char strc_1[] = {"bacbababadababacambabacaddababacasdsd"};
- char strc_2[] = {"ababaca"};
- int stri_1[strlen(strc_2)]; //next数组
- int i = 0, j = 0;
- str_next(stri_1, strc_2);
- while(strc_1[i] != '\0')
- {
- while(strc_2[j] != '\0' && strc_1[i] == strc_2[j]) //要是等于就开始循环
- {
- i++;
- j++;
- }
- if(strc_2[j] == '\0') //如果都匹配就执行本条语句并跳出
- {
- printf("第%d位之后\n", i - j);
- break;
- }
- j = stri_1[j] + 1; //如遇到不匹配就执行next数组
- i++;
- }
-
- if(strc_1[i] == '\0')
- {
- printf("未在字符串strc_1中找到与字符串strc_2相匹配的项!\n");
- }
- return 0;
- }
复制代码 |
|