VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 685|回复: 1

[交流] 关于C++ 入门 27课 作业

[复制链接]
01_avatar_middle
最佳答案
1 
在线会员 发表于 2020-5-25 09:05:47 | 显示全部楼层 |阅读模式
刚入门  不知道这样写 有什么地方错误没有


有更好的优化代码的 大佬 可以给点提示么?









//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 动态分配内存来解决。
//

void get_same_string(char* p1, char* p2)
{

        int a_len = strlen(p1);
        int a_len2 = strlen(p2);
        char* pp = new char[10];
        int pplen = strlen(pp);
        //char pp[10] = { };
        for (int idx = 0;idx< pplen ; idx++)
        {
                pp[idx] = '\0';
        }
        int ppa = 0;
        char* pp2 = p2;
        int j = 0;
        for (int i = 0; i < a_len; i++, p1++)
        {

                for (int a = 0; a < a_len2; a++,p2++)
                {
                        if (*p1 == *p2)
                        {

                                for (int b = 0; b < 5 ; b++)
                                {

                                        if (*p1 == pp[b])
                                        {
                                                ppa++;
                                                pp[ppa] = '\0';
                                                break;
                                        }
                                        else if (*p1 != pp[b])
                                        {
                                                pp[ppa] = *p1;
                                               
                                               
                                                //b = 0;
                                                break;

                                        }

                                }
                               

                        }
                        else {


                                continue;

                        }


                }
                p2 = pp2;

        }
        for (int s = 0 ; s< 10 ;s++)
        {
                if (pp[s]!= '\0')
                {
                        cout << pp[s];
                }
               
        }
         
}


int main()
{
        char a[10] = "aabbcc";
        char a1[10] = "kkbbcyy";

        get_same_string(a, a1);
        return 0;
}









上一篇:curl下载不全
下一篇:遥控问题
70_avatar_middle
最佳答案
49 
在线会员 发表于 2020-5-25 14:22:24 | 显示全部楼层
具体算法不会关于C++ 入门 27课 作业,传参形式可以参考一下 ,其中iSameDstLen相关的东西 是不必须的,只是为了安全起见
  1. int get_same_string(IN char* p1 ,IN char* p2 ,IN OUT char* szSameDst ,IN OUT int* iSameDstLen){
  2.         int maxLen;
  3.         maxLen = strlen(p1) > strlen(p2) ? (strlen(p1) + 1) :(strlen(p2) + 1);
  4.         //if(strlen(p1) > strlen(p2)){
  5.         //        maxLen = strlen(p1) +1;
  6.         //}
  7.         //else{
  8.         //        maxLen = strlen(p2) +2;
  9.         //}
  10.         char* szTemp = new char[maxLen];

  11.         //具体算法填充szTemp;

  12.         if(*iSameDstLen < strlen(szTemp)+1){
  13.                 *iSameDstLen = strlen(szTemp) +1;
  14.                 delete[] szTemp;
  15.                 return -1;
  16.         }
  17.         strcpy_s(szSameDst,*iSameDstLen,szTemp);
  18.         delete[] szTemp;
  19.         return 0;
  20. }
  21. int main()
  22. {
  23.         char a[10] = "aabbcc";
  24.         char a1[10] = "kkbbcyy";
  25.        
  26.         char szSameString[10];
  27.         int iSameStringLen = sizeof(szSameString);
  28.         get_same_string(a, a1,szSameString,&iSameStringLen);
  29.         return 0;
  30. }
复制代码
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

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

关闭

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

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

GMT+8, 2023-9-29 11:14

Powered by CcTry.CoM

© 2009-2021 cctry.com

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