{请教}the c primer plus 第11章第7题
题目如下:
编写一个函数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;
}
编写一个函数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;
}
...全文
相关推荐
c primer plus练习答案PDF版
### C Primer Plus:第五版《C Primer Plus》是由Stephen Prata编写的经典C语言教材,第五版提供了最新的C语言标准的全面覆盖,适合初学者和有一定基础的程序员学习与参考
C Primer Plus 附录A 复习题答案
《C Primer Plus 附录A 复习题答案》提供了对C语言基础知识的全面回顾和解答,是学习C语言过程中的重要参考资料。
C Primer Plus 练习题
《C Primer Plus》是Stephen Prata撰写的一本经典C语言教程,它为初学者和有经验的程序员提供了全面而深入的C语言学习资料。
C Primer Plus(5版)第8章编程题第1题
《C Primer Plus(5版)》是一本广受赞誉的C语言学习书籍,其第8章主要探讨了输入/输出和文件操作。编程题第1题通常会引导读者深入理解和应用这一章节的知识点,尤其是关于文件和字符处理的部分。
猎豹网校 c primer plus 视频课程 网盘地址
猎豹网校 c primer plus 视频课程 网盘地址猎豹网校 c primer plus 视频课程 网盘地址


