VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 275|回复: 6

[已解决]c++27课作业

[复制链接]
00_avatar_middle
最佳答案
0 
在线会员 发表于 2021-8-13 22:08:38 | 显示全部楼层 |阅读模式
int main()
{
       
        char *p1 = "aaaabbbjnnmk";
        char*p2 = "cccbbyyiomjs";
        char bijiao = 'a';
        char s[] = { 0 };
        int idx = 0;
        int idy = 0;
        int x = 0;
        int y = 0;
        for (char bijiao = 'a'; bijiao < 'z';bijiao++)
        {
                for (idx = 0; idx < 13;idx++)
                {
                        if (bijiao==*(p1+idx))
                        {
                                x++;
                        }
                        if (bijiao==*(p2+idx))
                        {
                                y++;
                        }
                        if (x > 0 && y > 0)
                        {
                                x = 0;
                                y = 0;
                                s[idy] = bijiao;
                                idy++;
                        }
                }
               
        }



        cout << s << endl;
}能编译成功  但就是输出不出来  
到底是哪里出问题了  请大佬帮我看看
还有我想问一下 27课中new的使用我还不是很明白  
就是比如
int*P=new(4)
delete 【】p;
课程说是用new申请一个包含4个元素的数组
不可以直接 int a[5]={0};
然后
int*p=&a吗?
最佳答案
00_avatar_small
2021-8-22 11:02:40
本帖最后由 tk3184020 于 2021-8-22 11:12 编辑

程序问题:
没搞清楚程序的作用,是比较p1, p2串中对应位置相同值吗?
如果是我想的这样,代码需要改动一下

#include<iostream>
using namespace std;

int main()
{
        char *p1 = "aaaabbbjnnmk";
        char *p2 = "cccbbyyiomjs";
        char bijiao = 'a';
        char s[12] = { 0 };
        int idx = 0;
        int idy = 0;
        int x = 0;
        int y = 0;

        for (; bijiao <= 'z'; bijiao++) {
                for (idx = 0; idx < 12; idx++) {
                        x = 0;
                        y = 0;
                        if (bijiao == *(p1 + idx)) {
                                x++;
                        }
                        if (bijiao == *(p2 + idx)) {
                                y++;
                        }
                        if (x > 0 && y > 0) {
                                s[idy] = bijiao;
                                idy++;
                        }
                }
        }
        cout << s << endl;

        return 0;
}
大约需要改这几处:
1.修改s的大小,现在s里面是空的不能赋值的。s[idy] = bijiao;执行程序应该就崩了
2.x 和 y的归零操作在子循环语句开始的时候(逻辑问题自己想想就明白了)
3.自循环的idx最大值11  因为上面两个串中一共12个元素  0-11 12个数
4.小于等于才能去到z
这样修改运行输出为b 就是p1 和 p2 中相应位置对应相等的元素

其实要想完成这个功能 应该还有更简单的实现方式,总感觉这个有点繁琐了,我看老半天也看不懂它啥意思。。。。


new的问题:
new是c++中的关键字,是程序员主动的在堆中分配内存用的,这个关键字是对c语言中malloc函数的再一次封装,它的本质和malloc分配内存差不多,可以简单理解为 new = malloc + 构造函数。 同样 与delete对应的是 c语言中的free  都是手动释放堆中申请的内存

你自己写的那个数组和指针,是临时的变量,可以简单理解为在一个函数执行之后就被释放了

这就是你写的 和new 的区别, new只能去手动释放, 你自己写的那个函数过后他就给自动释放了
new出来的东西,往往在函数结尾返回一个指针,或者在函数形参传入指针,为了在这个函数执行之后可以再次使用new出来的这块内存
比如说:(通过函数返回)
int* testfunc() {
    new 一个

    把new出来的东西进行某种操作

    return 把这个指针返回   这样的话 返回去的指针就能在其他地方用了,等你不需要的时候就delete
}
再比如说:(函数形参返回)
void testfunc(int *x) {
    x传进来可以是空的
    new一个  让x指向它,这样的话 x就可以在这个函数里面完成赋值,在函数运行结束就可以继续用了
}




上一篇:萌新提问,关于MFC消息的问题
下一篇:C++ 输出非英文字符串出错
00_avatar_middle
最佳答案
7 
在线会员 发表于 2021-8-22 11:02:40 | 显示全部楼层    本楼为最佳答案   
bestAnswer
本帖最后由 tk3184020 于 2021-8-22 11:12 编辑

程序问题:
没搞清楚程序的作用,是比较p1, p2串中对应位置相同值吗?
如果是我想的这样,代码需要改动一下

#include<iostream>
using namespace std;

int main()
{
        char *p1 = "aaaabbbjnnmk";
        char *p2 = "cccbbyyiomjs";
        char bijiao = 'a';
        char s[12] = { 0 };
        int idx = 0;
        int idy = 0;
        int x = 0;
        int y = 0;

        for (; bijiao <= 'z'; bijiao++) {
                for (idx = 0; idx < 12; idx++) {
                        x = 0;
                        y = 0;
                        if (bijiao == *(p1 + idx)) {
                                x++;
                        }
                        if (bijiao == *(p2 + idx)) {
                                y++;
                        }
                        if (x > 0 && y > 0) {
                                s[idy] = bijiao;
                                idy++;
                        }
                }
        }
        cout << s << endl;

        return 0;
}
大约需要改这几处:
1.修改s的大小,现在s里面是空的不能赋值的。s[idy] = bijiao;执行程序应该就崩了
2.x 和 y的归零操作在子循环语句开始的时候(逻辑问题自己想想就明白了)
3.自循环的idx最大值11  因为上面两个串中一共12个元素  0-11 12个数
4.小于等于才能去到z
这样修改运行输出为b 就是p1 和 p2 中相应位置对应相等的元素

其实要想完成这个功能 应该还有更简单的实现方式,总感觉这个有点繁琐了,我看老半天也看不懂它啥意思。。。。


new的问题:
new是c++中的关键字,是程序员主动的在堆中分配内存用的,这个关键字是对c语言中malloc函数的再一次封装,它的本质和malloc分配内存差不多,可以简单理解为 new = malloc + 构造函数。 同样 与delete对应的是 c语言中的free  都是手动释放堆中申请的内存

你自己写的那个数组和指针,是临时的变量,可以简单理解为在一个函数执行之后就被释放了

这就是你写的 和new 的区别, new只能去手动释放, 你自己写的那个函数过后他就给自动释放了
new出来的东西,往往在函数结尾返回一个指针,或者在函数形参传入指针,为了在这个函数执行之后可以再次使用new出来的这块内存
比如说:(通过函数返回)
int* testfunc() {
    new 一个

    把new出来的东西进行某种操作

    return 把这个指针返回   这样的话 返回去的指针就能在其他地方用了,等你不需要的时候就delete
}
再比如说:(函数形参返回)
void testfunc(int *x) {
    x传进来可以是空的
    new一个  让x指向它,这样的话 x就可以在这个函数里面完成赋值,在函数运行结束就可以继续用了
}
00_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-8-22 20:20:37 | 显示全部楼层
tk3184020 发表于 2021-8-22 11:02
程序问题:
没搞清楚程序的作用,是比较p1, p2串中对应位置相同值吗?
如果是我想的这样,代码需要改动一 ...

原来是这样  谢谢大佬了 主要是我当时想不到其他方法 然后看到其他贴的人说可以一个一个对比 我才想从a对到z  new原来是这种作用  相当于一个可以随时释放掉的全局变量是吗?
00_avatar_middle
最佳答案
7 
在线会员 发表于 2021-8-26 19:35:09 | 显示全部楼层
ghost23 发表于 2021-8-22 20:20
原来是这样  谢谢大佬了 主要是我当时想不到其他方法 然后看到其他贴的人说可以一个一个对比 我才想从a对 ...

不客气,一起进步

单从这个变量的创建和销毁来说可以简单这么理解。
它和全局变量还不一样
申请出来的内存,你得用一个指针去指向它,要是拿不到这样的一个指针,那这块内存虽然存在有效数据但是也利用不到,还白白占地方
全局变量的话就不一样了,全局变量整个程序过程中就这一份,通常就唯一标识,基本是不动的,很多函数都可以访问它,缺点很多
最好不要这样理解,全局变量慎用!!!
00_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-8-26 21:01:33 | 显示全部楼层
tk3184020 发表于 2021-8-26 19:35
不客气,一起进步

单从这个变量的创建和销毁来说可以简单这么理解。

原来是这样  这就清楚很多了  谢谢大佬了  c++27课作业
00_avatar_middle
最佳答案
7 
在线会员 发表于 2021-8-27 00:05:35 | 显示全部楼层
ghost23 发表于 2021-8-26 21:01
原来是这样  这就清楚很多了  谢谢大佬了

客气了客气了 共同进步c++27课作业
98_avatar_middle
最佳答案
0 
在线会员 发表于 2021-8-27 08:48:23 | 显示全部楼层
来学习啦。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

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

关闭

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

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

GMT+8, 2021-9-27 05:34

Powered by CcTry.CoM

© 2009-2021 cctry.com

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