标题:[求助]C Primer Plus练习题问题
只看楼主
家力掠
Rank: 2
等 级:论坛游民
帖 子:52
专家分:16
注 册:2015-6-28
结帖率:41.18%
已结贴  问题点数:20 回复次数:1 
[求助]C Primer Plus练习题问题
题目:编写一个函数string_in(),它接受两个字符串参数,如果第二个字符串被包含在第一个中,就返回被包含的字符串开始的地址.例如:string_in("hats","at")返回hats中a的地址,否则返回空指针.
程序代码:
#include <stdio.h>
char *string_in(char *,char *);
int main(void)
{
   char str1[81], str2[81];
   char *ptr;

   do{

   puts("Enter the first string: ");
   fgets(str1, 80, stdin);
   puts("Enter the second string: ");
   fgets(str2, 80, stdin);
   ptr = string_in(str1, str2);
   if(ptr){
      puts(ptr);
      printf("address:%p\n", ptr);
   }  

   else  puts("Can't find!");
   puts("Enter any char except q to continue:");
   fgets(str1, 80, stdin);
   }while(*str1 != 'q');
   puts("Quit!");

   return 0;
}

char *string_in(char *str1, char *str2)
{
   for (; *str1 != '\0'; str1++)
      for (; *str2 != '\0'; str2++)
         if (*str1 == *str2)
            return str1;
   if (*str1 == '\0' || *str2 == '\0')
      return NULL;
}
想问下错在哪里,为什么每次输入例如good od以后就输出Can't find.但是输入od good以后就可以返回指针的地址,每次不输入参数时也可以返回指针地址.
搜索更多相关主题的帖子: 练习题 字符串 
2015-08-14 21:40
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
你这string_in函数的代码完全是在瞎扯蛋(各种错误,却无一丝正确的地方),你让别人怎么改?

你可以参考一下标准库中的strstr函数,不谈各种高深的算法,一个最简单的伪代码是
strcmp( str+0, str2 ) == 0 吗?如果是返回 str+0;
strcmp( str+1, str2 ) == 0 吗?如果是返回 str+1;
strcmp( str+2, str2 ) == 0 吗?如果是返回 str+2;
……
2015-08-17 09:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-456382-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.279623 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved