通过定义一个新的函数strend并且没有它(单独)来检查字符串a是否在字符串b的末尾?

时间:2017-01-31 15:44:07

标签: c arrays string

我不明白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;
}

2 个答案:

答案 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;

它具有欺骗性:每个循环的每次迭代仅在st上执行增量。在每种情况下,循环终止后都会有一个减量。这种代码风格会更清晰(这意味着完全相同):

while(*s!='\0') {
    ++s;
}
--s;

while(*t!='\0') {
    ++t;
}
--t;

这些循环分别为步骤st,转发到第一个空字符,然后向后移动一个位置。这使得每个字符串都指向字符串的最后一个字符,假设输入字符串都不为空。

该函数具有未定义的行为,或者参数为null,并且如果在条目上,或者参数指向空字符串,或者(由于上面的代码段未显示的相关原因),如果字符串{{ 1}}大于字符串t的长度。