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

C++查找两组字符串中整数交集 逐字符对比误匹配问题求助

问题根因

你当前的实现是逐字符遍历两个字符串进行比对,没有先把字符串切分为独立的整数值,直接导致两个异常:

  • 逗号、空格在两个输入字符串中都存在,会被误判为匹配项保留
  • 多位数会被拆分为单个数字字符匹配,比如示例中第一个字符串的3,会因为第二个字符串的13包含字符3被误判为匹配

修复方案

按「拆分字符串转整数→找整数交集→拼接为结果字符串」的流程实现即可,完整可运行代码如下:

#include <string>
#include <iostream>
#include <sstream>
#include <vector>
#include <unordered_set>
using namespace std;

// 工具函数:把带逗号分隔的数字字符串转成整数vector
vector<int> strToNumVec(const string& s) {
    vector<int> res;
    stringstream ss(s);
    string temp;
    // 按逗号作为分隔符切分
    while (getline(ss, temp, ',')) {
        // 自动忽略子串前导空格,转成int存入
        res.push_back(stoi(temp));
    }
    return res;
}

string FindIntersection(string strArr[], int arrLength)
{
    // 把两个输入字符串都转成整数列表
    vector<int> vec1 = strToNumVec(strArr[0]);
    vector<int> vec2 = strToNumVec(strArr[1]);
    // 把第二个列表的数存入哈希集合,加快查找速度
    unordered_set<int> numSet(vec2.begin(), vec2.end());
    string matched = "";
    for (int num : vec1) {
        if (numSet.count(num)) {
            // 已经有匹配项的话先加逗号分隔
            if (!matched.empty()) {
                matched += ",";
            }
            // 整数转字符串拼到结果里
            matched += to_string(num);
        }
    }
    return matched;
}
int main(void)
{
    string A[] = { "1, 3, 4, 7, 13", "1, 2, 4, 13, 15" };
    int arrLength = sizeof(A) / sizeof(*A);    
    cout << "elemets 1: " << A[0] << '\n';
    cout << "elemets 2: " << A[1] << '\n';
    cout << '\n' << "matched number in both elemets:" << '\n' << FindIntersection(A, arrLength);
    return 0;
}

运行输出

elemets 1: 1, 3, 4, 7, 13
elemets 2: 1, 2, 4, 13, 15

matched number in both elemets:
1,4,13

和你期望的输出完全一致。

疑问解答

  • 是否需要转成整数再对比?是,转成整数对比可以完全避免分隔符、多位数拆分的问题,逻辑更简洁不容易出错。
  • 匹配到的整数是否需要转成字符串再输出?是,因为函数返回值要求是字符串格式,所以匹配到的整数需要转成字符串后再拼接为最终结果。

内容的提问来源于stack exchange,提问作者Davidson Cassagnol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:39:03