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

如何将[[1,4],...]格式的字符串转换为vector<vector<int>>?

如何将嵌套数组格式的字符串转换为vector<vector>?

我完全懂你这种卡在字符串解析上的无奈——明明思路清晰,却被格式问题绊住脚。你的代码方向是对的,但问题出在没处理字符串里的[、]、,这些特殊符号,导致stringstream没法正确识别和提取数字。

先分析你原代码的问题

你用ss>>temp读取时,会把[[1,4],这类包含符号的内容当成一个完整的字符串,而ss2没法从这种混合了符号和数字的字符串里提取出x和y,自然也就没法生成正确的子数组。

解决方案1:逐个字符处理,过滤干扰符号

这种方法更直观,遍历字符串的每个字符,只收集数字,遇到分隔符时就把收集到的数字转成整数存入数组:

#include<iostream>
#include<sstream>
#include<vector>
#include<cctype>
using namespace std;

int main() {
    string str = "[[1,4], [5,7], [4,1], [8,9]]";
    vector<vector<int>> vec;
    vector<int> current_subvec;
    string num_buffer;

    for (char c : str) {
        // 收集数字字符(支持负数的情况)
        if (isdigit(c) || (c == '-' && num_buffer.empty())) {
            num_buffer += c;
        } 
        // 遇到逗号或右括号,说明当前数字结束
        else if (c == ',' || c == ']') {
            if (!num_buffer.empty()) {
                current_subvec.push_back(stoi(num_buffer));
                num_buffer.clear();
            }
            // 遇到右括号,代表当前子数组完成
            if (c == ']' && !current_subvec.empty()) {
                vec.push_back(current_subvec);
                current_subvec.clear();
            }
        }
        // 其他字符([、空格)直接跳过
    }

    // 验证输出
    for (auto& subvec : vec) {
        cout << "vec[" << &subvec - &vec[0] << "] = {" << subvec[0] << ", " << subvec[1] << "}" << endl;
    }

    return 0;
}

解决方案2:用stringstream配合符号跳过

利用stringstream的>>操作会自动跳过空白符的特性,主动跳过那些干扰符号,直接读取数字:

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

int main() {
    string str = "[[1,4], [5,7], [4,1], [8,9]]";
    stringstream ss(str);
    vector<vector<int>> vec;
    char dummy; // 用来存储跳过的符号

    // 跳过最外层的第一个[
    ss >> dummy;

    while (ss >> dummy) {
        if (dummy == '[') {
            vector<int> subvec;
            int num;
            // 读取子数组内的数字,直到遇到]
            while (ss >> num) {
                subvec.push_back(num);
                ss >> dummy; // 跳过逗号或]
                if (dummy == ']') break;
            }
            vec.push_back(subvec);
            // 跳过子数组后面的逗号和空格(如果存在)
            ss >> dummy;
        }
    }

    // 验证输出
    for (size_t i = 0; i < vec.size(); ++i) {
        cout << "vec[" << i << "] = {" << vec[i][0] << ", " << vec[i][1] << "}" << endl;
    }

    return 0;
}

两种方法都能实现你想要的效果,运行后就能得到vec[0]={1,4}、vec[1]={5,7}这样的二维vector了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:01:36