串
BF 匹配算法:
#include <stdio.h> #include <string.h> #define MAXSIZE 100 // 返回匹配成功的字符在主串中的索引 // 如果匹配失败,则返回-1 // 索引从0开始 int BF(char* s, char* t, int slen, int tlen) { int i = 0, j = 0; while (i < slen && j < tlen) { if (s[i] == t[j]) { ++i; ++j; } else { i = i - j + 2 - 1; j = 0; } } if (j == tlen) return i - j + 1 - 1; else return -1; } int main(void) { char s[100] = { '\0' }; printf("输入主串:"); gets(s); int slen = strlen(s); char t[100] = { '\0' }; printf("输入模式串:"); gets(t); int tlen = strlen(t); int res = BF(s, t, slen, tlen); if (res != -1) { printf("模式串在主串中的位置为第 %d 个字符。\n", res + 1); } else { printf("模式串不存在于主串中。\n"); } return 0; }
执行结果:
输入主串:samesamplesame 输入模式串:sample 模式串在主串中的位置为第 5 个字符。
KMP 算法:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <memory.h> #define MAXSIZE 100 void getNext(int* next, char* t, int tlen) { int i = 0; int j = -1; next[0] = -1; while (i < tlen) { if (j == -1 || t[i] == t[j]) { ++i; ++j; next[i] = j; } else { j = next[j]; } } } // s 是主串,t 是模式串 // i 用来遍历 s,j 用来遍历 t int KMP(char* s, char* t, int slen, int tlen) { int i = 0, j = 0; int* next = (int*)malloc(sizeof(int) * tlen); memset(next, 0, sizeof(int) * tlen); getNext(next, t, tlen); while (i < slen && j < tlen) { if (j == -1 || s[i] == t[j]) { ++i; ++j; } else j = next[j]; } if (j == tlen) { return i - j + 1 - 1; } else return -1; } int main(void) { char s[100] = { '\0' }; printf("输入主串:"); gets(s); int slen = strlen(s); char t[100] = { '\0' }; printf("输入模式串:"); gets(t); int tlen = strlen(t); int res = KMP(s, t, slen, tlen); if (res != -1) { printf("模式串在主串中的位置为第 %d 个字符。\n", res + 1); } else { printf("模式串不存在于主串中。\n"); } return 0; }
执行结果相同。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术