我正在尝试自学C,所以我正在编写一个程序来查看另一个字符串末尾是否存在字符串。
#include <stdio.h>
#include <stdlib.h>
int containsAtEnd(char *s, char *t);
int strlen(char *s);
int main()
{
char *x = "tacocat";
char *y = "bol";
printf("%d\n", strend(x, y));
getchar();
return 0;
}
int strlen(char *s)
{
int i;
for (i = 0; i != '\0'; ++i)
;
printf("%d", i);
return i;
}
int containsAtEnd(char *s, char *t)
{
int tlen = strlen(*t);
int slen = strlen(*s);
int i = 0;
s += slen - tlen;
while ((*s == *t) && *s != '\0')
i++; s++; t++;
if (i < (tlen-1))
return 0;
else
return 1;
}
然而,无论主函数中给出的字符串如何,始终打印“001”,表示第一个字符串中0和第二个字符串的长度都存在。
答案 0 :(得分:1)
如果以下代码可以帮助您,请尝试。我还建议您使用IDE或分析程序,它告诉您从整数中获取指针而不使用强制转换和条件始终为真(或始终为假)。
#include <stdio.h>
int containsAtEnd(char *s, char *t);
int strlen(char *s);
int strlen(char *s)
{
int i;
for (i = 0; s[i] != '\0'; ++i)
;
printf("%d", i);
return i;
}
int containsAtEnd(char *s, char *t)
{
int tlen = strlen(t);
int slen = strlen(s);
int i = 0;
s += slen - tlen;
while ((*s == *t) && *s != '\0') {
i++; s++; t++;
}
if (i < (tlen-1))
return 0;
else
return 1;
}
int main()
{
char *x = "tacocat";
char *y = "bol";
printf("%d\n", containsAtEnd(x, y));
char *x2 = "foobarbaz";
char *y2 = "bar";
printf("%d\n", containsAtEnd(x2, y2));
getchar();
return 0;
}