首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言字串查找實戰:歌曲搜索小程序

     編輯:關於C語言

C語言字串查找實戰:歌曲搜索小程序

標準庫 <string.h> 提供 strstr 在母串中查找子串,返回首次出現位置指針,未找到返回 NULL。本文通過一個歌曲搜索小程序演示用法。

代碼實現

#include <stdio.h>
#include <string.h>

char tracks[][80] = {
    "I left my heart in Harvard Med School",
    "Newwark,Newwark - a wonderful town",
    "From here to maternity",
    "The girl from Iwo Jima",
};

void find_track(char search_for[]) {
    for (int i = 0; i < 4; i++) {
        if (strstr(tracks[i], search_for))
            printf("Track %d: '%s'\n", i, tracks[i]);
    }
}

int main() {
    char search_for[80];
    printf("Search for: ");
    fgets(search_for, 80, stdin);
    search_for[strlen(search_for)-1] = '\0';  // 移除 fgets 讀入的換行符
    find_track(search_for);
    return 0;
}

運行示例

$ ./song_search
Search for: Harvard
Track 0: 'I left my heart in Harvard Med School'

$ ./song_search
Search for: town
Track 1: 'Newwark,Newwark - a wonderful town'

$ ./song_search
Search for: girl
Track 3: 'The girl from Iwo Jima'

關鍵點解析

  • fgets(buf, size, stdin):安全讀取一行(含換行符),防止緩衝區溢出。gets 已棄用(不安全)。
  • strlen(s)-1 定位換行符位置,覆蓋為 \0 截斷。
  • strstr(haystack, needle):大小寫敏感查找。若需忽略大小寫,可用 strcasestr(POSIX,非標準)或自寫循環 tolower 比較。
  • 二維陣列 tracks[][80]:每行固定 80 字符,便於靜態初始化。

擴展練習

  1. 支援多關鍵詞邏輯(AND/OR)。
  2. 顯示匹配上下文(高亮關鍵詞)。
  3. 從文件載入歌曲列表,動態分配記憶體。
  4. 用 strtok 分詞建立倒排索引,加速大量數據查找。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved