user-0 提问: 早上写好的一个集合运算器，中午修改一下，就不知道怎么回事，错了，错了。

回复:
user: user-1
content: 不重复集  A =1,2,5,8｝; B =2,4,6,8}; 并，交，差: Union(A,B) = {1,2,4,5,6,8} Add(A,B)   ={2,8}  Diff(A,B)  ={1,5} Diff(B,A)  ={4,6}      可重复集的一种方案：   A ={1,2,5,8｝; B ={2,4,6,8}; 并，交，差: Union(A,B) = {1,2,2,4,5,6,8,8} Add(A,B)   ={2,8} Diff(A,B)  ={1,5} Diff(B,A)  ={4,6}  集合，一般不考虑顺序； 集合排序，是为了更方便操作。

user: user-2
content: 早上是好的，说明基本代码思路框架还是好的！现在乱了估计是某处一点修改导致逻辑错误了！ 可以单步调试分析下，要学会调试程序！分析代码走向

user: user-3
content: LZ程序是先排序后显示，所以显示的是排序过后的结果。如下改为先显示后排序：        printf("请输入要运算的B集合：\n");       scanf("%s",Set);       Insert(b,Set);       printf("集合B=[");       Tranver(b);       printf("]");       sort (b);       printf("请继续...\n");  对于A集合也应如此修改。

user: user-1
content: 交集 两个集合都有的存入交集。  估计楼主，没有搞清楚 自己要实现可重复集，还是不重复集，如何定义并，交，差等集合运算。

user: user-1
content: 集合有可重复集，和不重复集 一般的集合的实现，多半都是不重复集。  不重复集的元素顺序，一般不重要； 所以一般实现为排序集，方便处理集合的各种操作。  对于，不重复集的运算， 并集，一般就是归并两个集，并排除其中的重复元素。 差集，去掉另一个集合中有的元素，由于已经排序，实现起来也比较方便。  可重复集，需要定义何为并，何为交，才能运算。

user: user-4
content: 但看程序的话没啥问题，你自己再调试看看。话说你中午改了哪里，可以说说么？  调试的话其实也不难，比如交集吧，你先输入a、b然后在进入交集函数的地方设个断点，然后看看a、b的原始状态是否是符合要求的（已排序），然后一步步单步下来就可以了，看看是不是哪里的运算顺序不符合你的想法。如果没什么错误的话，然后看看打印是否有问题。总之就是一步步单步下来的。  我粗略的看了下，没看出啥明显的错误。和3楼一样，我照你的样本输入，执行的结果是对的。你是否哪里搞错了？还是有特殊的样本？你再试试看吧。

user: user-5
content: 任何修改前要做好backup 学会debug

user: user-6
content: 求并集也一样简单， 将集合B作为并集基础，然后用A中的数据区跟B的数据比， 比到相等的就break， 一直到结束都没有比到相等的就直接放到最后， 循环....

user: user-6
content: LZ有些坑，跟了半天发现结果是正确的（仅限于你提供的两个输入）！！！ 在公司，上传不了东西， 其实简单的实现是 一个双重循环 用第一个集合的所有元素一个一个和第二个集合比，比到相等的就存起来，break， 继续用第二个去比....

user: user-7
content: 仅供参考#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 ; }

user: user-0
content: 用户手册： 1.本程序的运行环境为DOS操作系统，执行文件为“集合运算程序.exe”. 2.进入演示程序后即显示文本方式的用户界面如图1： 3.输入“1”并且回车，则构建一个新的集合A，选择“2”，则新建一个新的集合B 4.选择“3”或者“4”并回车，则进入集合的交集或者并集运算，计算机会自动将结果输出到屏幕上。 5.按“0”并回车，则退出。   注：本程序在编写的时候出现一个小小的bug，在输入集合B的时候，立刻显示的并不是输入的集合的顺序，只经过排序算法之后的集合，如“图2”，本人输入“5476499”，它显示的是：“4456799”。这是排序算法排序过后的结果，本人在调试程序的时候一直没有debug出来，但这并不影响其运算的结果。