我正在做 K&R练习 5-4 (p107)。
编写函数 strend(s,t) ,如果字符串 t 出现在字符串 s 的末尾,则返回 1,否则返回 0。
我认为最好的方法是...
- 将两个指针都递增到末尾
- 当每个字符匹配时,通过两个字符串倒数
- 如果我们已经完成计数到第二个字符串的开头,则返回 1
所以这就是我所拥有的......
int strend(const char *str1, const char *str2) {
int i = 0;
while (*str1++ != '\0');
while (*str2++ != '\0') {
i++;
}
i++;
while (*str2-- == *str1-- && i > 0) {
i--;
}
return (i == 0);
}
如您所见,我使用计数器来判断我何时到达第二个字符串的开头。
是否有任何其他循环可以在没有计数器的情况下使用来判断我们何时到达字符串的开头(类似于寻找\0
字符串的结尾)?
谢谢。
更新
没想到要使用指针-我仍在学习并忘记了一些事情!
我想出了这个...
int strend(const char *str1, const char *str2) {
char *start = str2;
while (*str1++ != '\0');
while (*str2++ != '\0');
while (*str2-- == *str1--) {
if (str2 == start) {
return 1;
}
}
return 0;
}