標準庫 <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 字符,便於靜態初始化。strtok 分詞建立倒排索引,加速大量數據查找。