【发布时间】:2013-05-11 07:50:18
【问题描述】:
我正在编写strend(s, t) 的实现,它检查字符串s 是否以字符串t 结尾。
例如,如果 -
char s[] = "abcdefoo";
char t[] = "foo";
那么,strend(s, t) 为真,因为"abcdefoo" 以"foo" 结尾。
但是,如果 -
char s[] = "acefooD";
char t[] = "foo";
那么,strend(s, t) 为假,因为"acefooD" 不以"foo" 结尾。
这是我的代码。它总是返回 0 (false)。我不明白为什么。
int strend(char *s, char *t)
{
char *i;
i = s + strlen(s) - strlen(t);
while (*i++ == *t++ != '\0')
;
if (*i == '\0')
return 1;
return 0;
}
为什么它不起作用?
PS:这是 K&R2 中的一个练习。
【问题讨论】:
-
(*i++ == *t++ != '\0')应该是(*i++ == *t++) -
我看不出 K&R 和 C++ 之间的关系。 (提示,提示)
-
@glglgl 但是指针和c++是有关系的。
-
我还可以建议放入一组空的大括号以获得良好的造型吗(即使这只是一个练习)?虽然该循环在技术上是正确的,但对于按原样维护代码的人来说很容易混淆。尽管这个操作很深奥,但通常会假设分号是一个错字。删除那个分号真的会改变程序的逻辑。请记住:无论是使用
()进行操作命令还是使用{}显式定义代码块,对代码排序过于明确从来都不是一件坏事。 -
在取消引用
i之前,您可能需要检查s是否比t短。
标签: c string algorithm pointers