作业帮 > 综合 > 作业

请教一个C语言知识在前面已经定义了一个指针*s 而后面的while(*s)是什么意思呢?这样的条件应该怎样判断?# in

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/10 12:34:34
请教一个C语言知识
在前面已经定义了一个指针*s 而后面的while(*s)是什么意思呢?这样的条件应该怎样判断?
# include
# include
# include
int fun(char *s,char *s1)
{
int n;
char *p ,*r;
n=0;
while(*s)
{
p=s;
r=s1;
while(*r)
if(*r==*p)
//判断p和r指向的字符是否相同
{
r++;
p++;
}
else
break;
if(*r=='\0')
//如果r指向串的尾标志,则统计n加1
n++;
s++;
}
return n;
}
main()
{
char s[81],s1[4];
int n;
FILE *out;
printf("input main string:");
gets(s);
printf("input sub string:");
gets(s1);
puts(s);
puts(s1);
n=fun(s,s1);
printf("n=%d\n",n);
out=fopen ("outfile.dat","w");
strcpy(s,"asd asasdfg asd as zx67 asd mklo");
strcpy(s1,"as");
fprintf(out,"%d",fun(s,s1));
fclose (out);
}
这个程序的功能是输入一个长的字符串 然后再输入一个这个长字符串里出现过的字符串 看看该字符串在原字符串出现过几次 比如输入asdfsasdgdasd 再输入asd 输出3
while语句的表达式是while(*s) while(*r);这种形式,系统是怎样判断的呢?
这道题我们C语言期末考试考过.
因为*s指针指向的是一个char类型的,所以while(*s)是判断指向的char型是不是为空,即判断指向的内存单元是不是'\0'.
while(*s)是while(*s!='\0')的简写.
理while循环即括号里条件为真,则执行循环.对于字符类型char而言,只要不为'\0',即为真.
希望我的回答对你有所帮助:)
还有不明白的百度HI~