在字符串str中查找子串sub C语言代码简单
时间: 2024-10-29 07:18:16 浏览: 10
在C语言中,查找子串`sub`在字符串`str`中的起始位置通常使用的是KMP(Knuth-Morris-Pratt)算法或Boyer-Moore算法,它们比简单的线性搜索(如上述代码)更高效。这里是一个使用KMP算法的例子:
```c
#include <stdio.h>
#include <string.h>
// 创建部分匹配表
void compute_lps(char *pattern, int lps[]) {
int index = 0, length = 0;
lps[0] = 0;
while (index < strlen(pattern)) {
if (pattern[index] == pattern[length]) {
length++;
lps[index+1] = length;
index++;
} else {
if (length != 0)
length = lps[length-1];
else
lps[index+1] = 0;
index++;
}
}
}
// KMP搜索函数
int kmp_search(char *text, char *pattern) {
int text_len = strlen(text);
int pattern_len = strlen(pattern);
int lps[pattern_len];
compute_lps(pattern, lps);
int index = 0, match_index = 0;
while (index < text_len) {
if (text[index] == pattern[match_index]) {
index++;
match_index++;
}
// 当字符不匹配时处理情况
if (match_index != 0) {
match_index = lps[match_index-1]; // 从LPS表中回溯
} else {
index++;
}
// 找到子串,返回其起始位置
if (match_index == pattern_len)
return index - pattern_len;
}
return -1; // 子串没找到
}
int main() {
char str[] = "Hello, World!";
char sub[] = "World";
printf("Substring '%s' found at position %d\n", sub, kmp_search(str, sub));
return 0;
}
```
阅读全文