VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 567|回复: 1

《实用C++》27课new及作业提问

[复制链接]
55_avatar_middle
最佳答案
0 
在线会员 发表于 2019-5-3 21:48:44 | 显示全部楼层 |阅读模式
10驿站币
对于27课的new动态分配内存,听了之后还是不怎么清楚
例子:
char* get_same_string(char* p1, char* p2)
{
    //
}
在函数中定义一个局部变量 szret[100] 数组,用这个数组来存储相同部分的子串 "bc",那么就不能返回,看是看懂了,但具体怎么操作?
这个就好比之前的交换2个数字的函数swap(int a, int b)一样,在主函数中cout a,b的值还是定义的值一样?
下面的例子int* p = new int(5);------申请了一个值等于5的动态内存P?
(所以有没有具体的例子。。。)
《实用C++》27课new及作业提问

《实用C++》27课new及作业提问

基于上面的疑问,糊里糊涂做了27课作业
思路是从第一个字符串的第一个字母和第二个字符串的每个字母比较,相同就塞进新创的数组里,但如果字符串2中出现相同的字母,比如下面的p2就有3个g
输出就有ggg想不到怎么消除重复的字母,求解决办法《实用C++》27课new及作业提问

而且对于代码第9行的char* p = new char[20];感觉并没有什么实际意义
《实用C++》27课new及作业提问

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. void get_same_string(char* p1, char* p2)
  5. {
  6.         int s1 = strlen(p1);
  7.         int s2 = strlen(p2);
  8.         int s = strlen(p1) > strlen(p2) ? strlen(p1) : strlen(p2);
  9.         char* p = new char[20];
  10.         char m[20] = { 0 };
  11.         int count = 0;
  12.         int i = 0;
  13.         star:
  14.         for (int z = 0; z < s; z++)
  15.         {
  16.                 if (p1[i] == p2[z])
  17.                 {
  18.                         m[count] = p1[i];
  19.                         count++;
  20.                 }
  21.         }
  22.         i++;
  23.         if(i<s)
  24.         {
  25.                 goto star;
  26.         }
  27.        
  28.         cout << "The same words are:" <<  endl;
  29.         for (int i = 0; i < 20; i++)
  30.         {
  31.                 cout << m[i];
  32.         }
  33.         cout << endl;
  34. }
  35. int main()
  36. {
  37.         char p1[20] = "gvbsdfgfdbdf";
  38.         char p2[25] = "ghtehbfdgewg";
  39.         get_same_string(p1, p2);
  40.         system("pause");
  41.         return 0;
  42. }
复制代码


另外,对于之前一篇对27课作业的讨论:https://www.cctry.com/forum.php?mod=viewthread&tid=289927&highlight=27%BF%CE%D7%F7%D2%B5
由syc更改的答案对于在p11多打几个字符如char* p11 = "aabbcckbcybkyy"之后,结果会出错

27课的new绝对是初学到现在最难懂的了《实用C++》27课new及作业提问

最佳答案

查看完整内容

你打印出多个g是因为你16行到20行的for循环满足条件赋值之后没有break出来,所以找打了字符串2中的所有的g。你应该在if条件满足之后break出来




上一篇:键盘记录源码记录窗口标题
下一篇:各位 现在有支持vs2019的番茄小助手吗
34_avatar_middle
最佳答案
0 
在线会员 发表于 2019-5-3 21:48:45 | 显示全部楼层
你打印出多个g是因为你16行到20行的for循环满足条件赋值之后没有break出来,所以找打了字符串2中的所有的g。你应该在if条件满足之后break出来
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

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

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

GMT+8, 2020-11-29 11:54

Powered by CcTry.CoM

© 2009-2020 cctry.com

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