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

如何将std::string转换为std::vector<std::vector<char>>并实现反向转换

嘿,这个需求很清晰,我来给你一步步实现字符串和二维字符向量之间的互相转换!

1. 把std::string转成std::vector<std::vector>

这里给你两种实现方式,按需选择:

方法一:用std::stringstream分割(推荐,简洁省心)

stringstream会自动帮你处理空格分割,不管是单个空格还是多个连续空格都能正确识别单词,非常适合大多数场景:

#include <iostream>
#include <string>
#include <vector>
#include <sstream>

std::vector<std::vector<char>> stringTo2DVector(const std::string& str) {
    std::vector<std::vector<char>> result;
    std::stringstream ss(str);
    std::string word;
    
    // 逐个读取分割后的单词
    while (ss >> word) {
        // 把单词直接转成char的vector
        std::vector<char> charVec(word.begin(), word.end());
        result.push_back(charVec);
    }
    
    return result;
}

// 测试一下
int main() {
    std::string str{"Lorem ipsum dolor sit amet"};
    auto arr = stringTo2DVector(str);
    
    // 打印验证结果
    for (const auto& vec : arr) {
        std::cout << "[";
        for (size_t i = 0; i < vec.size(); ++i) {
            std::cout << "'" << vec[i] << "'";
            if (i != vec.size() - 1) std::cout << ", ";
        }
        std::cout << "]\n";
    }
    return 0;
}

方法二:手动遍历分割(适合需要精细控制的场景)

如果你需要处理特殊情况(比如保留连续空格对应的空向量),可以手动遍历字符串来实现:

std::vector<std::vector<char>> stringTo2DVectorManual(const std::string& str) {
    std::vector<std::vector<char>> result;
    std::vector<char> currentWord;
    
    for (char c : str) {
        if (c == ' ') {
            // 避免连续空格生成空的子vector,这里可以根据需求调整
            if (!currentWord.empty()) {
                result.push_back(currentWord);
                currentWord.clear();
            }
        } else {
            currentWord.push_back(c);
        }
    }
    
    // 别忘了处理最后一个单词(如果字符串不以空格结尾)
    if (!currentWord.empty()) {
        result.push_back(currentWord);
    }
    
    return result;
}

2. 把std::vector<std::vector>转回std::string

这个就简单了,遍历每个子向量拼接成单词,再用空格连接起来就行,注意别在末尾多添空格:

std::string twoDVectorToString(const std::vector<std::vector<char>>& arr) {
    std::string result;
    
    for (size_t i = 0; i < arr.size(); ++i) {
        // 将子vector的字符拼接成单个单词
        std::string word(arr[i].begin(), arr[i].end());
        result += word;
        
        // 只有不是最后一个单词时才加空格
        if (i != arr.size() - 1) {
            result += " ";
        }
    }
    
    return result;
}

// 测试还原功能
int main() {
    std::vector<std::vector<char>> arr{ {'L','o','r','e','m'}, {'i','p','s','u','m'} };
    std::string str = twoDVectorToString(arr);
    std::cout << str << std::endl; // 输出:Lorem ipsum
    return 0;
}

如果你的场景需要保留原字符串里的连续空格,那手动分割和还原的逻辑都要调整,比如遇到连续空格时添加空的子vector,还原时遇到空vector就加空格——不过一般按单词分割的场景,上面的代码完全够用啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 16:02:46