关于使用链表求两个集合的交集并集和差集的问题

Topazpeach 2016-05-26 08:37:21
加精
如题,由于学校系统会查重,所以只能发图上来了。希望大神帮忙看看问题在哪?
编译通过,运行后得不出正确结果,结果如下:

设置断点调试后如下:

原代码如下:







...全文
5927 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_46891839 2020-04-07
  • 打赏
  • 举报
回复
未定义 "set"和"find_difference"
HanJuly9569 2016-06-13
  • 打赏
  • 举报
回复
引用 30 楼 HanJuly9569 的回复:
[quote=引用 8 楼 paschen 的回复:]
[quote=引用 4 楼 Topazpeach 的回复:]
[quote=引用 1 楼 qq423399099 的回复:]
你不会想让我们手打吧……

代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

请问我能否加您的QQ把代码发给您让您帮忙看一下呢?谢谢![/quote]

你next是NULL当然读不到值了[/quote]

路过学学啊[/quote]

试试上传图片
HanJuly9569 2016-06-13
  • 打赏
  • 举报
回复
引用 8 楼 paschen 的回复:
[quote=引用 4 楼 Topazpeach 的回复:]
[quote=引用 1 楼 qq423399099 的回复:]
你不会想让我们手打吧……

代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。

请问我能否加您的QQ把代码发给您让您帮忙看一下呢?谢谢![/quote]

你next是NULL当然读不到值了[/quote]

路过学学啊
qq_23848479 2016-06-06
  • 打赏
  • 举报
回复
line_us 2016-06-04
  • 打赏
  • 举报
回复
路过看看解析、
qq_35197594 2016-06-02
  • 打赏
  • 举报
回复
想问这样的找交集的方式有什么错误,得不到正确的结果。 Node *intersection(Node *head1, Node *head2) { Node *head = NULL, *p1 = head1, *p2 = head2; for (;p1 != NULL;p1 = p1->next) for (; p2 != NULL;p2 = p2->next) { Node *p3 = new Node; if (p1->content == p2->content) { p3->content = p1->content; p3->next = head; head = p3; } } return head; }
cattpon 2016-05-29
  • 打赏
  • 举报
回复
引用 16 楼 paschen 的回复:
我已经知道你不对的原因了: 你find_intersection find_union find_difference这几个函数中的最后一个参数传入的只是一个指针的复制品 也就是说你函数中使用的指针和主函数中的并不是同一个 你在函数中进行赋值并不会影响主函数里的指针 故最后主函数中输出的是空
正解~
paschen 版主 2016-05-29
  • 打赏
  • 举报
回复
引用 17 楼 Topazpeach 的回复:
[quote=引用 16 楼 paschen 的回复:] 我已经知道你不对的原因了: 你find_intersection find_union find_difference这几个函数中的最后一个参数传入的只是一个指针的复制品 也就是说你函数中使用的指针和主函数中的并不是同一个 你在函数中进行赋值并不会影响主函数里的指针 故最后主函数中输出的是空
啊所以应该怎么改正呢?另外求删代码楼,谢谢![/quote] 引用传递或者传入指针的指针
great_6 2016-05-29
  • 打赏
  • 举报
回复
有没有简单的方法
Topazpeach 2016-05-29
  • 打赏
  • 举报
回复
引用 21 楼 paschen 的回复:
[quote=引用 20 楼 Topazpeach 的回复:] [quote=引用 19 楼 paschen 的回复:] [quote=引用 17 楼 Topazpeach 的回复:] [quote=引用 16 楼 paschen 的回复:] 我已经知道你不对的原因了: 你find_intersection find_union find_difference这几个函数中的最后一个参数传入的只是一个指针的复制品 也就是说你函数中使用的指针和主函数中的并不是同一个 你在函数中进行赋值并不会影响主函数里的指针 故最后主函数中输出的是空
啊所以应该怎么改正呢?另外求删代码楼,谢谢![/quote] 引用传递或者传入指针的指针[/quote] 我在函数体中把第3个都改成了Node *&find_xxx,然后运行发现find_intersection结果没有问题了,而find_union和find_difference仍然出现CXX0030: 错误: 无法计算表达式的值,所以能否再帮忙看一下问题在哪里呢?都已经改成引用传递了呀[/quote] 没存你代码啊,建议你学会自己调试[/quote] 谢谢!已经找到原因,是6楼说的重复定义的问题。
paschen 版主 2016-05-29
  • 打赏
  • 举报
回复
引用 20 楼 Topazpeach 的回复:
[quote=引用 19 楼 paschen 的回复:] [quote=引用 17 楼 Topazpeach 的回复:] [quote=引用 16 楼 paschen 的回复:] 我已经知道你不对的原因了: 你find_intersection find_union find_difference这几个函数中的最后一个参数传入的只是一个指针的复制品 也就是说你函数中使用的指针和主函数中的并不是同一个 你在函数中进行赋值并不会影响主函数里的指针 故最后主函数中输出的是空
啊所以应该怎么改正呢?另外求删代码楼,谢谢![/quote] 引用传递或者传入指针的指针[/quote] 我在函数体中把第3个都改成了Node *&find_xxx,然后运行发现find_intersection结果没有问题了,而find_union和find_difference仍然出现CXX0030: 错误: 无法计算表达式的值,所以能否再帮忙看一下问题在哪里呢?都已经改成引用传递了呀[/quote] 没存你代码啊,建议你学会自己调试
Topazpeach 2016-05-29
  • 打赏
  • 举报
回复
引用 19 楼 paschen 的回复:
[quote=引用 17 楼 Topazpeach 的回复:] [quote=引用 16 楼 paschen 的回复:] 我已经知道你不对的原因了: 你find_intersection find_union find_difference这几个函数中的最后一个参数传入的只是一个指针的复制品 也就是说你函数中使用的指针和主函数中的并不是同一个 你在函数中进行赋值并不会影响主函数里的指针 故最后主函数中输出的是空
啊所以应该怎么改正呢?另外求删代码楼,谢谢![/quote] 引用传递或者传入指针的指针[/quote] 我在函数体中把第3个都改成了Node *&find_xxx,然后运行发现find_intersection结果没有问题了,而find_union和find_difference仍然出现CXX0030: 错误: 无法计算表达式的值,所以能否再帮忙看一下问题在哪里呢?都已经改成引用传递了呀
Topazpeach 2016-05-28
  • 打赏
  • 举报
回复
引用 16 楼 paschen 的回复:
我已经知道你不对的原因了: 你find_intersection find_union find_difference这几个函数中的最后一个参数传入的只是一个指针的复制品 也就是说你函数中使用的指针和主函数中的并不是同一个 你在函数中进行赋值并不会影响主函数里的指针 故最后主函数中输出的是空
啊所以应该怎么改正呢?另外求删代码楼,谢谢!
paschen 版主 2016-05-28
  • 打赏
  • 举报
回复
引用 12 楼 Topazpeach 的回复:
[quote=引用 8 楼 paschen 的回复:] [quote=引用 4 楼 Topazpeach 的回复:] [quote=引用 1 楼 qq423399099 的回复:] 你不会想让我们手打吧…… 代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
请问我能否加您的QQ把代码发给您让您帮忙看一下呢?谢谢![/quote] 你next是NULL当然读不到值了[/quote] 不啊,那个是在链表为空时插入第一个结点,然后其next空。接着后面再添加的时候就走下面一个循环了啊[/quote] 你代码是图片,所以没帮你调试,如果不是这个原因,建议单步跟踪程序运行,一般很容易找到问题所在
paschen 版主 2016-05-28
  • 打赏
  • 举报
回复
我已经知道你不对的原因了: 你find_intersection find_union find_difference这几个函数中的最后一个参数传入的只是一个指针的复制品 也就是说你函数中使用的指针和主函数中的并不是同一个 你在函数中进行赋值并不会影响主函数里的指针 故最后主函数中输出的是空
赵4老师 2016-05-27
  • 打赏
  • 举报
回复
仅供参考:
#include <algorithm>
#include <iostream>
#include <functional>
#include <cstring>
using namespace std;
int main() {
    char *Alphabet = "abcdefghijklmnopqrstuvwxyz" ;
    char *Vowels   = "aeiou" ;
    char *AlphaNum = "0123456789abcdef" ;
    char result[45] ;
    char *last ;

    int lenA  = strlen(Alphabet) ;
    int lenV  = strlen(Vowels  ) ;
    int lenAN = strlen(AlphaNum) ;

    cout << "Alphabet = " << Alphabet << endl ;
    cout << "Vowels   = " << Vowels   << endl ;
    cout << "AlphaNum = " << AlphaNum << endl ;

    cout << "\nusing non-predicate versions" << endl ;

    //non-predicate set_difference
    last = set_difference(Alphabet, Alphabet+lenA,
                          AlphaNum, AlphaNum+lenAN,
                          result) ;
    *last = 0 ;
    cout << "set_difference(Alphabet, AlphaNum) =  " << result << endl ;

    //non-predicate set_intersection
    last = set_intersection(Alphabet, Alphabet+lenA,
                            AlphaNum, AlphaNum+lenAN,
                            result) ;
    *last = 0 ;
    cout << "set_intersection(Alphabet, AlphaNum) =  " << result << endl ;

    //non-predicate set_symmetric_difference
    last = set_symmetric_difference(Alphabet, Alphabet+lenA,
                                    Vowels  , Vowels  +lenV,
                                    result) ;
    *last = 0 ;
    cout << "set_symmetric_difference(Alphabet, Vowels) =  " << result << endl ;

    //non-predicate set_union
    last = set_union(Alphabet, Alphabet+lenA,
                     AlphaNum, AlphaNum+lenAN,
                     result) ;
    *last = 0 ;
    cout << "set_union(Alphabet, AlphaNum) =  " << result << endl ;

    cout << "\nusing predicate versions" << endl ;

    //predicate set_difference
    last = set_difference(Alphabet, Alphabet+lenA,
                          AlphaNum, AlphaNum+lenAN,
                          result  , less<char>()) ;
    *last = 0 ;
    cout << "set_difference(Alphabet, AlphaNum) =  " << result << endl ;

    //predicate set_intersection
    last = set_intersection(Alphabet, Alphabet+lenA,
                            AlphaNum, AlphaNum+lenAN,
                            result  , less<char>()) ;
    *last = 0 ;
    cout << "set_intersection(Alphabet, AlphaNum) =  " << result << endl ;

    //predicate set_symmetric_difference
    last = set_symmetric_difference(Alphabet, Alphabet+lenA,
                                    Vowels  , Vowels  +lenV,
                                    result  , less<char>()) ;
    *last = 0 ;
    cout << "set_symmetric_difference(Alphabet, Vowels) =  " << result << endl ;

    //predicate set_union
    last = set_union(Alphabet, Alphabet+lenA,
                     AlphaNum, AlphaNum+lenAN,
                     result  , less<char>()) ;
    *last = 0 ;
    cout << "set_union(Alphabet, AlphaNum) =  " << result << endl ;

    return 0 ;
}
paschen 版主 2016-05-27
  • 打赏
  • 举报
回复
引用 4 楼 Topazpeach 的回复:
[quote=引用 1 楼 qq423399099 的回复:] 你不会想让我们手打吧…… 代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
请问我能否加您的QQ把代码发给您让您帮忙看一下呢?谢谢![/quote] 你next是NULL当然读不到值了
Topazpeach 2016-05-27
  • 打赏
  • 举报
回复
引用 8 楼 paschen 的回复:
[quote=引用 4 楼 Topazpeach 的回复:] [quote=引用 1 楼 qq423399099 的回复:] 你不会想让我们手打吧…… 代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
请问我能否加您的QQ把代码发给您让您帮忙看一下呢?谢谢![/quote] 你next是NULL当然读不到值了[/quote] 不啊,那个是在链表为空时插入第一个结点,然后其next空。接着后面再添加的时候就走下面一个循环了啊
Topazpeach 2016-05-27
  • 打赏
  • 举报
回复
引用 6 楼 wuiiao 的回复:
find_difference为什么定义2个Node *q
是想放在循环外部定义变量的……然后for循环内又定义了
Topazpeach 2016-05-27
  • 打赏
  • 举报
回复
引用 7 楼 wuiiao 的回复:
为什么find_union大括号不匹配你也能编译
大括号是匹配的……你看到的不匹配是截图的时候没截好截重了
加载更多回复(7)

64,670

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧