K&Rを読もう(38) 演習 4-1 再開
ちょっとサボりすぎたかな・・・今日から4章に入ります。
4章から、「これぞK&R」という問題が多数出てくるので楽しみです。
演習 4-1
sにおけるtの「最も右側」の出現位置を返す関数strrindex(s,t)を書け。
簡単!
return j - 1;
と思ったが・・・「最も右側」なので、strrindex("hoge moge hoge", "hoge")の場合、3になってしまうので、文字列sの末尾から走査することにする。
int strrindex(char s[], char t[]) { int i, j, k; int len = strlen(t); if (!len) return -1; for (i = strlen(s) - 1; i != -1; i--) { for (j = i, k = len - 1; k != -1 && s[j] == t[k]; j--, k--) ; if (k == -1) return i; } return -1; }
'\0'を除かなければならないので、末尾から走査するのはちょっとメンドイ。