在C語言中,解決字符串匹配問題通常可以使用以下幾種方法:
#include<stdio.h>
#include<string.h>
int string_match(const char *str1, const char *str2) {
int i;
for (i = 0; str1[i] != '\0' && str2[i] != '\0'; i++) {
if (str1[i] != str2[i]) {
return 0; // 不匹配
}
}
return str1[i] == '\0' && str2[i] == '\0'; // 如果兩個字符串都到達了結尾,則匹配
}
int main() {
const char *str1 = "hello";
const char *str2 = "hello";
printf("字符串匹配結果: %s\n", string_match(str1, str2) ? "匹配" : "不匹配");
return 0;
}
#include<stdio.h>
#include<string.h>
void compute_prefix_function(const char *pattern, int m, int *pi) {
int k = 0;
pi[0] = 0;
for (int q = 1; q < m; q++) {
while (k > 0 && pattern[k] != pattern[q]) {
k = pi[k - 1];
}
if (pattern[k] == pattern[q]) {
k++;
}
pi[q] = k;
}
}
int kmp_search(const char *text, const char *pattern) {
int n = strlen(text);
int m = strlen(pattern);
int pi[m];
compute_prefix_function(pattern, m, pi);
int q = 0;
for (int i = 0; i < n; i++) {
while (q > 0 && pattern[q] != text[i]) {
q = pi[q - 1];
}
if (pattern[q] == text[i]) {
q++;
}
if (q == m) {
return i - m + 1; // 匹配成功,返回子串起始位置
}
}
return -1; // 匹配失敗
}
int main() {
const char *text = "hello world";
const char *pattern = "world";
int result = kmp_search(text, pattern);
if (result != -1) {
printf("匹配成功,子串起始位置: %d\n", result);
} else {
printf("匹配失敗\n");
}
return 0;
}
這只是解決字符串匹配問題的兩種方法,還有其他更高效的算法,如Boyer-Moore算法等。你可以根據實際需求選擇合適的算法。