C - 文字列 - 文字列理論 - fgets関数, strlen関数
Head First C ―頭とからだで覚えるCの基本、 David Griffiths(著)、 Dawn Griffiths(著)、 中田 秀基(監修)、 木下 哲也(翻訳)、 O’Reilly Media)の 2.5章(文字列 - 文字列理論)、p.91(コンパイラになってみよう)の解答を求めてみる。
コード
main.c
#include <stdio.h>
#include <string.h>
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"};
void find_track(char search_for[])
{
puts(search_for);
for (int i = 0; i < 5; i++)
{
if (strstr(tracks[i], search_for))
{
printf("曲番号%i: '%s'\n", i, tracks[i]);
}
}
}
int main()
{
char search_for[80];
printf("検索語:");
fgets(search_for, 80, stdin);
search_for[strlen(search_for) - 1] = '\0';
find_track(search_for);
}
入出力結果(Terminal, Zsh)
% cc main.c && ./a.out
検索語:he
he
曲番号0: 'I left my heart in Harvard Med School'
曲番号3: 'From here to maternity'
曲番号4: 'The girl from Iwo Jima'
% cc main.c && ./a.out
検索語:I left my heart in Harvard Med School
I left my heart in Harvard Med School
曲番号0: 'I left my heart in Harvard Med School'
% cc main.c && ./a.out
検索語:I left my heart in Harvard Med SchoolI left my heart in Harvard Med SchoolI left my heart in Harvard Med SchoolI left my heart in Harvard Med SchoolI left my heart in Harvard Med School
I left my heart in Harvard Med SchoolI left my heart in Harvard Med SchoolI le
%