簡體   English   中英

使用 C 中的 strstr() function 打印包含 substring 的主字符串

[英]Print the main string that has the substring inside using strstr() function in C

我正在閱讀《Head First C》一書,在第 2.5 章第 94 頁中,作者顯示了以下代碼:

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

這將在 arrays 的以下數組中搜索用戶的輸入:

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

main() function:

int main()
{
    char search_for[80];
    puts("Search for: ");
    fgets(search_for, 80, stdin);
    find_track(search_for);

    return 0;
}

Output 示例:

Search for: Iwo
Result:
Track 4: 'The girl from Iwo Jima'

這段代碼的問題是作者說它有效,但它沒有。

strstr()的手冊頁說這個 function 如果在數組的任何字符串中都沒有遇到子字符串,它將返回一個 null 指針,並且它將返回子字符串的指針指向開頭,所以我這樣做了適配代碼:

void find_track(char search_for[]) {
    register int i;
    char *temp;

    for (i = 4; i >= 0; --i) {
        temp = strstr(tracks[i], search_for);
        if (temp) {
            strcpy(temp, tracks[i]);
            printf("Track %i: '%s'\n", i, temp);
        } else {
            puts("Song was not found ... ");
            break;
        }
    }
}

代碼有什么問題? 我做了一些調試,但一切似乎都很好,所以它可能是一個邏輯錯誤,但是像strstr() function 這樣簡單的東西,類似邏輯錯誤的東西聽起來很難相信。

謝謝,

作為一個額外的次要問題......這是一本適合菜鳥的好書嗎?

fgets 還讀取換行符。 在將字符串傳遞給 function 之前,您需要跳過字符串中的換行符。 可能下面的行會有所幫助:

search_for[strcspn(search_for, "\n")]='\0';

strcspn 沒有。 在第一個參數中第一次出現第二個參數之前,第一個參數的字符數。 我們將 '\n' 的 position 處的字符設置為 '\0' ,這會終止 position 處的字符串,因此將跳過 position 之后的字符。

問候,哈里達斯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM