文字列の終りと比較するstrend関数

K&R本 演習5-4

文字列tが文字列sの終りにあるときには1を、そうでないときにはゼロを返す関数strend(s,t)を書け。

#include <stdio.h>
#include <string.h>

int strend(char *s,char *t) {
    size_t slen = strlen(s);
    size_t tlen = strlen(t);
    
    if ( slen < tlen ) {
        return 0;
    }
    
    s += slen - tlen;
    
    while ( *s++ == *t++ );
    
    return *s == '\0';
}

int main (void) {
    
    // 0 1 0のはず
    printf("%d\n",strend("abced","abc"));
    printf("%d\n",strend("abced","ced"));
    printf("%d\n",strend("ed","ced"));
    
    return 0;
}
$ main
0
1
0

できました。

この程度の仕様のプログラムならもうなんなく組めるようになってきました。少しは成長した証でしょうか。

ポインタが絡みまくるとやっぱりまだまだ実装に時間がかかるのでポインタ関連の処理をもっとやった方がいいですね。