如何在C++中将字符串转换为单字符字符串数组?
C++将字符串拆分为单个字符的string数组实现方案
原代码的问题
- 赋值方向错误:应该是将字符转换为string后赋值给
process数组,而非反向赋值 - 获取字符串长度方式错误:
sizeof(text)得到的是std::string对象本身的内存大小,不是字符串实际长度,需用text.size()或text.length() - 类型转换错误:直接将
char类型的text[i]赋值给string类型的数组元素不合法,需显式构造单个字符的string
推荐实现:使用std::vector<std::string>(动态大小,避免空间浪费)
#include <iostream> #include <vector> #include <string> int main() { std::string text = "String."; std::vector<std::string> result; // 遍历每个字符,构造单字符string并加入vector for (char c : text) { result.push_back(std::string(1, c)); } // 输出验证结果 std::cout << "["; for (size_t i = 0; i < result.size(); ++i) { if (i != 0) std::cout << " , "; std::cout << "\"" << result[i] << "\""; } std::cout << "]" << std::endl; return 0; }
说明:用范围for循环遍历字符串的每个字符,通过std::string(1, c)构造仅包含当前字符的string,再添加到动态数组vector中,无需提前指定数组大小,灵活且节省空间。
固定大小数组实现(仅当必须使用数组时)
#include <iostream> #include <string> int main() { std::string text = "String."; // 栈上数组需指定足够大的固定长度,或用动态分配的数组 std::string process[100]; // 遍历字符串,逐个转换为单字符string for (size_t i = 0; i < text.size(); ++i) { process[i] = std::string(1, text[i]); } // 输出验证结果 std::cout << "["; for (size_t i = 0; i < text.size(); ++i) { if (i != 0) std::cout << " , "; std::cout << "\"" << process[i] << "\""; } std::cout << "]" << std::endl; return 0; }
说明:若必须使用固定大小数组,需确保数组长度大于等于字符串长度;但栈上数组长度不能是变量(如text.size()),因此要么设足够大的固定值,要么用new动态分配数组(使用后需手动释放内存)。
简洁实现:使用std::transform
#include <iostream> #include <vector> #include <string> #include <algorithm> int main() { std::string text = "String."; std::vector<std::string> result(text.size()); // 用transform批量转换字符为单字符string std::transform(text.begin(), text.end(), result.begin(), [](char c) { return std::string(1, c); }); // 输出验证结果 std::cout << "["; for (size_t i = 0; i < result.size(); ++i) { if (i != 0) std::cout << " , "; std::cout << "\"" << result[i] << "\""; } std::cout << "]" << std::endl; return 0; }
说明:利用STL算法std::transform,结合lambda表达式,批量将字符串中的每个字符转换为单字符string,代码更简洁。
内容的提问来源于stack exchange,提问作者adkjhawdiuhwaiudaw
相关产品推荐
相关产品推荐

