编写一个函数string_in(char *str1,char *str2),如果字符串str1包含字符串str2,则返回数值1,否则返回数值2,还是内存提示出
貌似已经可以运行了,在一个QQ群里有另一个童鞋写了一个更好的算法,等我看看之后跟帖到最后-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------算法有问题。有些字符串能通过判断,有些没有返回值,不知道是不是循环的问题还是什么问题改进了一下,增加了一个临时str,不过算法还是有问题,有些语句能通过判断,有些语句不能通过判断---------在第二页有更好的算法,有完整的程序,貌似没有bug
# include <stdio.h>
#include"string.h"
int string_in(char* str1,char* str2)
{
int p,l2;
char* temstr;
l2=strlen(str2); //把字符串2的长度赋给l2
if(*str2) // s2 第一个字符不是空 进行下面的操作
{
while(*str1) // s1 不是结束符作为循环条件
{
if(*str1==*temstr) //字符串1和字符串2第一个字符相比,如果相等,做下面的运算
{
for(p=0;*(str1+p)==*(temstr+p);p++) //s1 s2 从第一个字符开始比较并同时往下移一个字符
{
while(p>=(l2-1)) //当p自增到把s2跑完的时候,则表示字符串1包含字符串2
return 1; //返回1
}
}
else if(*str1!='\n')
{ str1++;
temstr=str2;} //str1自增,使其找到与str2字符串首字符的字符。
else return 2 ; //当str1自增到结束的时候,他里面都没有字符串与str1相等,那就返回2
}
}
return 2;
}
int main()
{
char i[80],b[80];
char* str1=i;
char* str2=b;
int flag=1,a;
while(flag==1)
{
printf("imput string1 :\n");
gets(str1);
printf("imput string2 :\n");
gets(str2);
if(strlen(str1)<strlen(str2))
{
flag=1;
printf("字符串1比字符串2多才对!");
}
else flag=0;
}
a=string_in(str1,str2);
printf("%d",a);
return 0;
}
[ 本帖最后由 a271885843 于 2012-1-10 22:12 编辑 ]