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

C++如何将无分隔符字符串拆分为单个字符存入数组或vector

C++ 拆分无分隔符字符串为单个字符存储的实现方案

最优实现方案

C++ 中std::string本身自带下标随机访问能力,每个下标对应的元素就是单个char类型字符,如果你需要单独存储到vector中,直接使用vector的范围构造函数即可,全程时间复杂度为O(n),无额外冗余操作,是性能最高的实现方式。相比C风格数组,使用vector<char>不需要手动管理内存,边界处理更安全,更推荐使用。

实现逻辑说明

  • 读取输入:无分隔符字符串没有空格,直接用std::cin >> 字符串变量即可完成读取,cin默认以空白符作为分隔符,刚好适配该场景。
  • 拆分存储:直接将字符串的首尾迭代器传入vector构造函数,就能自动将每个字符拆分存入vector对应下标位置。
  • 字符转数字:遍历vector中的每个字符,按照你的业务规则做映射即可,比如X映射为1、.映射为0、O映射为2等。

可直接运行的参考代码

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

int main() {
    // 读取输入的无分隔符字符串
    std::string input_str;
    std::cin >> input_str;

    // 拆分存入vector<char>,一行代码完成,无需手动遍历
    std::vector<char> s_line(input_str.begin(), input_str.end());

    // 验证拆分结果,输入为X..O时输出和你要求的完全一致
    for (int i = 0; i < s_line.size(); ++i) {
        std::cout << "s_line[" << i << "] = '" << s_line[i] << "'" << std::endl;
    }

    // 字符转数字示例,可根据需求修改映射规则
    std::vector<int> num_line(s_line.size());
    for (int i = 0; i < s_line.size(); ++i) {
        switch(s_line[i]) {
            case 'X': num_line[i] = 1; break;
            case 'O': num_line[i] = 2; break;
            case '.': num_line[i] = 0; break;
            default: num_line[i] = -1; // 异常值处理
        }
    }

    return 0;
}

如果你需要使用C风格数组存储,可以用以下方式实现,注意数组长度需要提前设置为大于等于输入字符串的最大可能长度,避免越界:

// 假设输入字符串最大长度不超过100
char s_line[100];
strcpy(s_line, input_str.c_str());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:57:02