以下是使用 C 語言實現 string_search 函數的一個範例。這個函數使用了簡單的字串比對方法來查找子字串 pat 在字串 str 中的位置。如果找到,它將返回子字串開始的位置(以0為起始索引);如果未找到,則返回 -1。
c
Copy code
#include <stdio.h>
#include <string.h>
int string_search(char str[], char pat[]) {
int strLen = strlen(str);
int patLen = strlen(pat);
// 遍歷主字串
for (int i = 0; i <= strLen - patLen; i++) {
int j;
// 對於當前位置i,遍歷子字串
for (j = 0; j < patLen; j++) {
if (str[i + j] != pat[j]) {
break; // 如果當前字符不匹配,則跳出內部迴圈
}
}
// 如果子字串已經完全匹配
if (j == patLen) {
return i; // 返回當前位置i
}
}
return -1; // 如果未找到匹配,返回-1
}
int main() {
char str[] = "I will pass this exam.";
char pat[] = "pass";
int result = string_search(str, pat);
if (result != -1) {
printf("子字串 \"%s\" 在字串 \"%s\" 中的位置:%d\n", pat, str, result + 1); // 將索引轉換為以1為起始
} else {
printf("子字串 \"%s\" 未在字串 \"%s\" 中找到。\n", pat, str);
}
return 0;
}
這個函數首先計算主字串 str 和子字串 pat 的長度。然後,它遍歷主字串的每個字符,對於每個字符,再遍歷子字串以檢查是否有匹配的子字串。如果在某個位置找到了完全匹配的子字串,則返回該位置的索引(注意,C語言中字符串索引從0開始)。如果遍歷完主字串後仍未找到匹配的子字串,則函數返回-1。
請注意,這是一個簡單但效率較低的算法,對於較長的字串或在需要頻繁執行搜尋的應用場景中,可能不是最佳選擇。在這些情況下,可以考慮使用更高效的字串搜尋算法,如 KMP (Knuth-Morris-Pratt)、Boyer-Moore 或 Rabin-Karp 算法。