c语言 字符串与字符串比较

来源:百度知道 编辑:UC知道 时间:2024/05/19 10:52:12
帮忙看一下,当第二个字符串不在第一个字符串中,为什么不输出-1呢,困惑中,谢谢

//字符串与字符串比较
#include<stdio.h>
int mystrsubstring(char *p,char *q);
void main()
{
int n;
char ch1[30],ch2[30],*p,*q;
q=ch1,p=ch2;
printf("请输入第一个字符串:");
gets(ch1);
printf("请输入第二个字符串:");
gets(ch2);
n=mystrsubstring(ch1,ch2);
printf("%d\n",n);
}
int mystrsubstring(char *q,char *p)
{
int i=0,j=0,count=0,flag=1,value;
while(p[i]!='\0')
{
flag=1;
if(p[i]==q[j])
{
flag=0;
count++;
i++;
j++;
}
else
{
if(flag==0)
{
i=0;
j=j-count+1;
}
else
{
j++;
}
}
}
if(p[i]=='\0' && flag==0)
{
value=j-count;
}
else
{
value=-1;
}
return value;
}

几个错误:

1.循环条件缺少了q[j]!='\0'

2.循环体开始的flag=1;是多余的.有这句的话,每次进入时都把flag变为1,那之前的flag=0不就不起作用了么

3.if(flag==0)
{
i=0;
j=j-count+1;
}
count忘了归0.而且还要加上flag=1;

4.最后的if(p[i]=='\0' && flag==0)错了,能执行到p[i]=='\0'的话,flag肯定是0,多余.

正确代码如下:

//字符串与字符串比较
#include<stdio.h>
int mystrsubstring(char *p,char *q);
void main()
{
int n;
char ch1[30],ch2[30],*p,*q;
q=ch1,p=ch2;
printf("请输入第一个字符串:");
gets(ch1);
printf("请输入第二个字符串:");
gets(ch2);
n=mystrsubstring(ch1,ch2);
printf("%d\n",n);
}
int mystrsubstring(char *q,char *p)
{
int i=0,j=0,count=0,flag=1,value;
while(q[j]!='\0' && p[i]!='\0')
{
if(p[i]==q[j])
{
flag=0;
count++;
i++;
j++;
}
else