演習5-4 K&R プログラミング言語C

演習5-4

t のポインタを文字列終端に移動させる際に、条件節で i をインクリメントしているのは、終端に到達した際にもインクリメントするため。
これは、文字列の比較が終端文字から始まるため。
文字列 t が文字列 s の終わりに存在すれば i0 までデクリメントされる。

#include <stdio.h>

int strend(char*, char*);

int main(void)
{
    char *s = "hello, world";
    char *t1 = "world";
    char *t2 = "sorld";

    printf("strend(\"%s\", \"%s\"); => %d\n", s, t1, strend(s, t1));
    printf("strend(\"%s\", \"%s\"); => %d\n", s, t2, strend(s, t2));

    return 0;
}

int strend(char *s, char *t)
{
    int i = 0;

    /* ポインタを各文字列終端'\0'へ移動させる */
    while (*s)
        s++;
    while (++i && *t)
        t++;

    /* 後方から前方に向けて、文字を比較する */
    while (*s-- == *t-- && i >= 0)
        i--;

    return i == 0;
}

実行結果

$ ./ex5-4
strend("hello, world", "world"); => 1
strend("hello, world", "sorld"); => 0
プログラミング言語C 第2版 ANSI規格準拠
B.W. カーニハン D.M. リッチー
共立出版
売り上げランキング: 9726
«
»