- 论坛徽章:
- 0
|
看K&R C,遇到一个习题,感觉自己做的比很多参考答案都简单,但是又不太拿得准。所以请大家帮忙看看我的做法会不会有什么问题,谢谢了。
题目是:编写函数strend(s, t)。如果字符串t出现在字符串s的尾部,该函数返回1,否则返回0。
没找参考答案之前,我的写法是:
int strend(char *s, char *t)
{
s = s + (strlen(s) - strlen(t));
while (*s++ != *t++)
return 0;
return 1;
}
思路是直接把指针s移动到尾部与字符串t长度匹配处,然后向后比较即可得到結果。
配套习题的答案是:
int strend_ref(char *s, char *t)
{
char *bs = s;
char *bt = t;
for (; *s; s++)
;
for (; *t; t++)
;
for (; *s == *t; s--, t--)
if (t == bt || s == bs)
break;
if (*s == *t && t == bt && *s != '\0')
return 1;
else
return 0;
}
他是先记住初始位置,然后把两个字符串的指针都移动到末尾再向前比较。
对于上面两种实现,自己用几对字符串都做了测试,結果没什么分别。从思路和实现上讲,我感觉自己的方案都要好一些,但是作者为什么没有这么做呢?还是说我的方案有问题?请有心人帮忙指点,谢谢了。
|
|