{请教}the c primer plus 第11章第7题

a5156520 a5156520 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
题目如下:
编写一个函数string_in(),它接受两个字符串指针参数。如果第二个字符串包含在第一个字符中,函数返回被包含的字符串开始的地址。例如,sting_in("hats","at"),返回hats中a的地址,否则,函数返回空指针。在一个使用循环语句为这个函数提供输入的完整程序中进行测试。
自己写的如下:代码有问题,但不知道错在哪里,请教。
#include <stdio.h>
#include <string.h>
char *string_in(char *str1,char *str2);
int main()
{
char ch1[50];
char ch2[20];
char *str;

puts("Enter the first string.(Enter a space line to quit)");
while(gets(ch1)&&*ch1!='\0')
{
puts("Enter the second string.");
gets(ch2);
str=string_in(ch1,ch2);
if(str==NULL)
printf("%s not in %s.\n",ch2,ch1);
else
{
printf("%s in %s begin with:",ch2,ch1);
puts(str);
}
puts("Enter the first string.(Enter a space line to quit)");
}

fflush(stdin);
getchar();
return 0;
}

char *string_in(char *str1,char *str2)
{
int i=0, k=0;
int sub,l;
int ct=0;

if(strlen(str2)<=strlen(str1))
{
if(k<=strlen(str1)+1) //str1[k]相比的字符允许往后一个,保证比较完str2[i]中的字符
{
if(!ct&&!(str2[i]-str1[k++]))//开始寻找与str2第一个字符相同的str1中的字符
{
ct++; //相同字符计数器
sub=((k-1)>=0?(k-1):0);//囊括str1第一个字符即与str2第一个字符相同的情况
}
if(ct&&!(str2[++i]-str1[k++])&&(k<=strlen(str1)+1))//str2与str1比较第一个字符之后的字符
ct++; //相同字符计数器
if(ct<strlen(str2)) //如果此次寻找的第一个相同字符之后的字符串未能囊括str2,寻找str1下一个中与str2第一个字符相同的字符
{
i=0;
k=sub+1; //保证从str1第一个与str2首字符相同的字符之后开始比较
ct=0; //相同字符初始计数
}
}

if(ct==strlen(str2))
return (str1+sub);
else
return NULL;
}
else
return NULL;
}

...全文
评论 12
收藏 已收藏
分享
返回顶部
a5156520
C语言 70,040 成员 243,237 内容