我不明白while循环在做什么。为什么它们只是在同一时间递增和递减地址。这有什么作用? / 这个问题已经解决了。请回答第二个问题。 /
int strend(char *s,char *t)
{
int len;
len = mystrlen(t);
为什么我们在s和t中同时递增和递减地址?
/ 这个问题已经解决了。请回答第二个问题。 /
while(*s!='\0')
++s;
--s;
while(*t!='\0')
++t;
--t;
while(len > 0)
{
if(*t==*s)
{
--t;
--s;
--len;
}
else
return 0;
}
if(len == 0)
return 1;
}
int mystrlen(char *t)
{
char *p;
p=t;
while(*p!='\0')
++p;
return p-t;
}
int main()
{
int pp;
char str1[100],str2[100];
scanf("%s",str1);
scanf("%s",str2);
pp = strend(str1,str2);
printf("%d",pp);
return 0;
}
答案 0 :(得分:0)
while(*s!='\0')
++s;
--s;
由于此while
循环没有支撑体,因此只有while
后面的语句才是循环的一部分。这相当于:
while(*s!='\0') { ++s; }
--s;
所以我们循环遍历字符串直到找到一个空字符,然后我们将一个字符撤回到该字符串的最后一个实际字符。
答案 1 :(得分:0)
为什么我们在s和t中同时递增和递减地址?
据推测,你问的是这段代码:
while(*s!='\0') ++s; --s; while(*t!='\0') ++t; --t;
它具有欺骗性:每个循环的每次迭代仅在s
或t
上执行增量。在每种情况下,循环终止后都会有一个减量。这种代码风格会更清晰(这意味着完全相同):
while(*s!='\0') {
++s;
}
--s;
while(*t!='\0') {
++t;
}
--t;
这些循环分别为步骤s
和t
,转发到第一个空字符,然后向后移动一个位置。这使得每个字符串都指向字符串的最后一个字符,假设输入字符串都不为空。
该函数具有未定义的行为,或者参数为null,并且如果在条目上,或者参数指向空字符串,或者(由于上面的代码段未显示的相关原因),如果字符串{{ 1}}大于字符串t
的长度。