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'を除かなければならないので、末尾から走査するのはちょっとメンドイ。