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