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
相关产品推荐
相关产品推荐

