Exercise 5.4 - strend returns 1 if string t occurs at the end of the string s#

Question#

Write the function strend(s,t), which returns 1 if the string t occurs at the end of the string s, and zero otherwise.

#include<stdio.h>
#define MAXLINE 1000

int mgetline(char s[],int max);
int strend(char *s,char *t);
int mystrlen(char *t);

int main(void)
{
    char s[MAXLINE],t[MAXLINE];
    int ret;
    mgetline(s,MAXLINE);
    mgetline(t,MAXLINE);
    ret = strend(s,t);
    printf("%d",ret);
    return 0;
}

int mgetline(char s[],int lim)
{
    int c,i;
    
    for(i=0;i<lim-1 && ((c=getchar())!=EOF) && c!='\n';++i)
        s[i]=c;

    if(c=='\n')
    {
        s[i]=c;
        ++i;
    }
    s[i]='\0';

    return i;
}

int strend(char *s,char *t)
{
    int len;
    len=mystrlen(t);
    while(*s!='\0')
        ++s;
    --s;

    while(*t!='\0')
        ++t;
            
    --t;
    while(len > 0)
    {
        if(*t==*s)
        {
            --t;
            --s;
            --len;
        }
        else
            return 0;
    }
    if( len == 0)
        return 1;
}

int mystrlen(char *t)
{
    char *p;
    p=t;

    while(*p!='\0')
        ++p;

    return p-t;
}

Explanation#

This program determines if the string t occurs at the end of string s. So the output of the program will look like.

$ ./a.out
something
thing
1

$ ./a.out
something
non
0

The primary part of this program is the strend function, which takes two character pointers, s and t. It calculates the length of t and stores in the variable len. And then, we back off till the last characters in both s and t.

while(*s!='\0')
    ++s;
--s;

while(*t!='\0')
    ++t;

--t;

And then we look for the match from the end. This is checked in this while loop. While the len is > 0, check if s and t are same and back off one character at a time.

while(len > 0)
{
    if(*t==*s)
    {
        --t;
        --s;
        --len;
    }
    else
        return 0;
}
if( len == 0)
    return 1;

If the string t exhausts, that is, it’s length, len becomes 0, then we known that string t occurs at the end of string s and we return 1. Otherwise, we return 0.