判断字符串A是否是字符串B的子集

来源:百度知道 编辑:UC知道 时间:2024/05/12 10:41:53
# include<string.h>
main()
{char * str1[20],* str2[20],* p, * q,* array_end;
int n,flag=1;
printf("Input two strings:\n");
gets(str1);
gets(str2);
n=strlen(str1);
array_end=str1+n-1;
p=str1;
q=str2;
while((*p!=*q)&&(*q!='\0')) q++;
for(p=str1+1;p<array_end&&flag;p++)
{if(*p!=*(++q))
flag=0;
}
if(flag) printf("\nYes");
else printf("\nNot");
}
代码有什么问题

1、应包含#include<stdio.h>,不然字符串输入输出会出错;
2、定义字符数组时应该去掉指针,不然就是字符地址数组了;
3、思路不是很正确,帮你改了一下:
# include<string.h>
#include<stdio.h>
void main()
{
char str1[20],str2[20],* p, * q,* array_end,* array_end2;
int n,n2,flag=0;
printf("Input two strings:\n");
gets(str1);
gets(str2);
n=strlen(str1);
n2=strlen(str2);
array_end=str1+n-1;
array_end2=str2+n2-1;
p=str1;
q=str2;
for(p=str1;p<=array_end&&!flag;p++)
{
if(*p==*(q))
q++;
if(q>array_end2)
{
flag=1;
break;
}
}
if(flag)
printf("\nYes");
else
printf("\nNot");
}

这个代码乱的一塌糊涂。
下面的代码你参考!
bool check(const char *a,const char *b)
{bool flag=true;
while (*a)
{
if (*a!=*b)
{flag=false;break;}
else