VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 257|回复: 1

[交流] 【实用C++】第二十七课 作业

[复制链接]
74_avatar_middle
在线会员 jiaokai123 发表于 2018-6-29 19:54:41 | 显示全部楼层 |阅读模式
27、小作业:
完成 get_same_string 函数的功能!
/*
char* get_same_string(char* p1, char* p2)
{
    //
}
get_same_string 函数的作用是从参数p1和p2中找出相同的部分,例如,p1的内容是:"aabbcc",p2的内容是:"kkbcyy",他们相同的子串就是 "bc" 对吧?我想把这个结果通过函数的返回值给传出去。所以函数的返回值是一个 char* 类型,如果在函数中定义一个局部变量 szret[100] 数组,用这个数组来存储相同部分的子串 "bc",那么就不能返回,为什么呢?因为 szret 是局部变量,作用域只是在函数的内部,超过函数的作用域之后 szret 的内存就可能被释放了。所以用它来返回之后,在函数的外部再去使用是非常不安全的,也是错误的。所以这种情况就可以使用 new 动态分配内存来解决。
*/



答:
  1. void main()
  2. {
  3.         char *p1 = new char[256];
  4.         char *p2 = new char[256];
  5.         char *str = NULL;

  6.         gets_s(p1,255);
  7.         gets_s(p2,255);

  8.         str = get_same_string(p1, p2);
  9.         printf(" %s\r\n", str);

  10.         delete[]p1;
  11.         delete[]p2;
  12.         if (str!=NULL)delete[]str;
  13.        
  14.         getchar();
  15.        
  16. }

  17. char* get_same_string(char* p1, char* p2)
  18. {
  19.         int i,j;
  20.         char* shortstr, *longstr, *substr;
  21.         if (NULL == p1 || NULL == p2)return NULL;

  22.         if (strlen(p1) <= strlen(p2))
  23.         {
  24.                 shortstr = p1;
  25.                 longstr = p2;
  26.         }
  27.         else
  28.         {
  29.                 shortstr = p2;
  30.                 longstr = p1;
  31.         }
  32.         substr = new char[sizeof(char)*(strlen(shortstr) + 1)];

  33.         for (i = strlen(shortstr) - 1; i > 0; i--)
  34.         {
  35.                 int xz = strlen(shortstr);
  36.                 for (j = 0; j <= (xz - i); j++)
  37.                 {
  38.                         memcpy(substr, &shortstr[j], i);
  39.                         substr[i] = '\0';

  40.                         if (strstr(longstr, substr) != NULL)
  41.                         {
  42.                                 return substr;
  43.                         }
  44.                 }
  45.         }
  46.         return NULL;

  47. }
复制代码



个人笔记:new反汇编追踪调用了malloc,而delete追踪 调用了free。




上一篇:【实用C++】第二十六课 枚举类型及定义新的类型名字 个人笔记
下一篇:【实用C++】第三十课 作业

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

75_avatar_middle
在线会员 coldBro 发表于 2018-6-29 23:10:05 | 显示全部楼层
我觉得吧,改成引用参数会好很多。
如果用动态数组就更好了,可以返回多个匹配子串。

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-10-21 21:32

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表