阿摩線上測驗 登入

申論題資訊

試卷:99年 - 099年高等三級暨普通普_資訊處理#29647
科目:程式設計
年份:99年
排序:0

申論題內容

三、用任何高階電腦語言撰寫一個函式 int string_search(char str[], char pat[]),它能計算 出子字串 pat 在字串 str 中的位置。例如,假設 str="I will pass this exam."且 pat="pass",則函式 string_search(str, pat) 回傳 7。(25 分)

詳解 (共 1 筆)

詳解 提供者:hchungw
以下是使用 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 算法。