[英]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.