A
arnuld
K&r2, exercise 5-4, page 107
Write the functions strend(s,t), which returns 1 if the string t occurs
at the end of the string s, and zero otherwise.
#include <stdio.h>
#include <string.h>
int strend(const char* s1, const char* s2);
int main(void)
{
const char* arr1 = "comp.lang.c";
const char* arr2 = "comp.lang.";
printf("strend(%s, %s) = %d\n", arr1, arr2, strend(arr1, arr2));
return 0;
}
/* return 1 if str2 occurs at the end of str1, zero otherwise */
int strend(const char* str1, const char* str2)
{
int ret;
/* If one of arguments is NULL, there is no pint in going next */
if(NULL == str1 || NULL == str2)
{
ret = 0;
}
else if(strlen(str1) < strlen(str2))
{
ret = 0;
}
else if ('\0' == *str1 && '\0' == *str2)
{
ret = 1;
}
else
{
size_t len1 = strlen(str1);
size_t len2 = strlen(str2);
const char* tmp1 = str1 + len1 - 1;
const char* tmp2 = str2 + len2 - 1;
size_t count = 0;
for(; *tmp1 == *tmp2 && count < len2; --tmp1, --tmp2, ++count)
;
if(count == len2 && *++tmp1 == *++tmp2) ret = 1;
else ret = 0;
}
return ret;
}
==================== OUTPUT =========================
[arnuld@dune C]$ gcc -ansi -pedantic -Wall -Wextra strend.c
[arnuld@dune C]$ ./a.out
strend(comp.lang.c, comp.lang.) = 0
[arnuld@dune C]$
Write the functions strend(s,t), which returns 1 if the string t occurs
at the end of the string s, and zero otherwise.
#include <stdio.h>
#include <string.h>
int strend(const char* s1, const char* s2);
int main(void)
{
const char* arr1 = "comp.lang.c";
const char* arr2 = "comp.lang.";
printf("strend(%s, %s) = %d\n", arr1, arr2, strend(arr1, arr2));
return 0;
}
/* return 1 if str2 occurs at the end of str1, zero otherwise */
int strend(const char* str1, const char* str2)
{
int ret;
/* If one of arguments is NULL, there is no pint in going next */
if(NULL == str1 || NULL == str2)
{
ret = 0;
}
else if(strlen(str1) < strlen(str2))
{
ret = 0;
}
else if ('\0' == *str1 && '\0' == *str2)
{
ret = 1;
}
else
{
size_t len1 = strlen(str1);
size_t len2 = strlen(str2);
const char* tmp1 = str1 + len1 - 1;
const char* tmp2 = str2 + len2 - 1;
size_t count = 0;
for(; *tmp1 == *tmp2 && count < len2; --tmp1, --tmp2, ++count)
;
if(count == len2 && *++tmp1 == *++tmp2) ret = 1;
else ret = 0;
}
return ret;
}
==================== OUTPUT =========================
[arnuld@dune C]$ gcc -ansi -pedantic -Wall -Wextra strend.c
[arnuld@dune C]$ ./a.out
strend(comp.lang.c, comp.lang.) = 0
[arnuld@dune C]$