编写一个函数
如果字符串str1包含 字符串str2 返回1 不包含返回0
下面是我写的代码
#include<stdio.h>
#include<string.h>
int search(char str1[],char str2[])
{ int i,j,t=0;
for(i=0;i<strlen(str1);i++)
{while(str1[i]==str2[0])
{for(j=0;j<strlen(str2);j++)
if(str1[i]!=str2[j]) break;
else i++;
t=1;
}
}
return(t);
}
main()
{ char str1[20],str2[20];
printf("Enter str1:");
gets(str1);
printf("Enter str2:");
gets(str2);
printf("%d",search(str1,str2));
}
在判定是否相等的地方有点问题
请教简单直接的方法
----------------解决方案--------------------------------------------------------
也不知你的意思是怎样的?
包含也有多种,一种是连续包含,一种是间接包含,我的是第二种,看是不是你要的。
#include<iostream>
using namespace std;
#include<string.h>
int search(char str1[],char str2[])
{ int len1,len2,i=0,j=0;
len1=strlen(str1);
len2=strlen(str2);
while(str1[i]&&str2[j])
{
if(str1[i]==str2[j])j++;
i++;
}
if(j==len2)return 1;
else return 0;
}
int main()
{
char str1[20],str2[20];
while(cin>>str1>>str2)
printf("%d\n",search(str1,str2));
return 0;
}
----------------解决方案--------------------------------------------------------
我要的是连续包含
----------------解决方案--------------------------------------------------------
你去试一下。
#include<iostream>
using namespace std;
#include<string.h>
int search(char str1[],char str2[])
{ int k=0,i,flag,j;
int a=strlen(str1);
int b=strlen(str2);
for(i=0;a-i>=b;i++)
{ flag=0;
for(j=0;j<b;j++)
if(str1[i+j]!=str2[j])
{flag=1;break;}
if(flag==0)
return 1;
}
return 0;
}
int main()
{
char str1[20],str2[20];
while(cin>>str1>>str2)
printf("%d\n",search(str1,str2));
return 0;
}
----------------解决方案--------------------------------------------------------
我用的是TC2.0
你这个部分看不懂
估计是编译器的问题
我更想知道的是我的怎么改
----------------解决方案--------------------------------------------------------
kmp算 法??
模式匹配问题
----------------解决方案--------------------------------------------------------
现在应该对了吧?
#include<stdio.h>
#include<string.h>
int search(char str1[],char str2[])
{ int i,j,t=0,k,bo;
for(i=0;i<strlen(str1);i++)
{k=i;bo=0;while(str1[k]==str2[0])
{for(j=0;j<strlen(str2);j++)
if(str1[k]!=str2[j]) {bo=1;break;}*********bo=1标记不满足条件
else k++;
if(bo==0) *********这里bo=0就代表满足条件,直接返回1.
return 1;
else break; ********bo=1不满足跳出while循环,进行下一步。
}
}
return(t);
}
main()
{ char str1[20],str2[20];
printf("Enter str1:");
gets(str1);
printf("Enter str2:");
gets(str2);
printf("%d",search(str1,str2));
}
你的代码:
#include<stdio.h>
#include<string.h>
int search(char str1[],char str2[])
{ int i,j,t=0;
for(i=0;i<strlen(str1);i++)
{while(str1[i]==str2[0])
{for(j=0;j<strlen(str2);j++)
if(str1[i]!=str2[j]) break;*********《1》***************
else i++; ********************《2》***********
t=1;
}
}
return(t);
}
main()
{ char str1[20],str2[20];
printf("Enter str1:");
gets(str1);
printf("Enter str2:");
gets(str2);
printf("%d",search(str1,str2));
}
你在《1》处的break只是跳出了for循环,其实应该同时要跳出while循环,要不然只要进入了while循环中,
那个t无论如何都是1了。如果是因为有一个不相等而执行《1》处跳出了循环,那i也应该改回原值。
如:
ababc
abc
按你的做法,在i=2,j=2时,执行了《1》,如果i没改回去,再执行下一步就是比较str1[3](也就是b)与str1[0](a)
显然就比较不出了。我用k就是解决这一点。
这样说不知你清楚了吗?
----------------解决方案--------------------------------------------------------
[CODE]
3积分的看来是
[/CODE]
----------------解决方案--------------------------------------------------------