You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++新手求助:如何实现两个char vector的相同与不同元素查找

解决两个char vector的共有与独有元素问题

先修正你代码里的几个核心问题:

  • 你定义的diff是vector<int>,但我们要处理char类型,需改成vector<char>
  • STL的set_difference、set_intersection这类集合算法,要求输入容器必须是有序的,所以第一步要先对两个char vector排序
  • 访问vector元素很简单,用下标v[i]或者范围for循环for (char c : v)都可以

下面是完善后的完整代码,包含输入处理、类型转换、结果计算与输出的全流程:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
 
int main(){
  
  string s1, s2;
  cin >> s1;
  cin >> s2;
 
  // 将string转换为char vector
  vector<char> v1(s1.begin(), s1.end());
  vector<char> v2(s2.begin(), s2.end());

  // 必须先排序,否则集合算法无法正常工作
  sort(v1.begin(), v1.end());
  sort(v2.begin(), v2.end());

  // 存储结果的vector
  vector<char> common;          // 共有元素
  vector<char> only_in_v1;      // v1独有的元素
  vector<char> only_in_v2;      // v2独有的元素

  // 计算共有元素
  set_intersection(v1.begin(), v1.end(),
                   v2.begin(), v2.end(),
                   back_inserter(common));

  // 计算v1独有的元素(在v1里但不在v2里)
  set_difference(v1.begin(), v1.end(),
                 v2.begin(), v2.end(),
                 back_inserter(only_in_v1));

  // 计算v2独有的元素(在v2里但不在v1里)
  set_difference(v2.begin(), v2.end(),
                 v1.begin(), v1.end(),
                 back_inserter(only_in_v2));

  // 输出结果
  cout << "共有元素:";
  for (char c : common) {
    cout << c << " ";
  }
  cout << endl;

  cout << "仅在第一个字符串中的元素:";
  for (char c : only_in_v1) {
    cout << c << " ";
  }
  cout << endl;

  cout << "仅在第二个字符串中的元素:";
  for (char c : only_in_v2) {
    cout << c << " ";
  }
  cout << endl;
 
  return 0;
}

关键细节说明

  1. 排序的必要性:set_difference和set_intersection基于有序范围设计,通过线性遍历比较元素,无序输入会导致结果错误。
  2. back_inserter的作用:自动将算法结果插入到vector末尾,无需提前分配容器大小,适合新手使用。
  3. 元素访问方式:代码用了C++11的范围for循环,简洁直观;也可以用传统下标循环:for (int i = 0; i < common.size(); i++) { cout << common[i] << " "; }
  4. 重复元素处理:如果原字符串有重复字符,算法会保留对应次数的共有元素。若需要去重,可在排序后添加以下步骤:
// 排序后去重
sort(v1.begin(), v1.end());
v1.erase(unique(v1.begin(), v1.end()), v1.end());

sort(v2.begin(), v2.end());
v2.erase(unique(v2.begin(), v2.end()), v2.end());

内容的提问来源于stack exchange,提问作者Franco Lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 23:40:31