二维字符数组到一维字符串数组
Posted
技术标签:
【中文标题】二维字符数组到一维字符串数组【英文标题】:2D array of chars to 1D array of strings 【发布时间】:2021-06-12 19:38:14 【问题描述】:在 c++ 中将二维字符数组复制到一维字符串数组中的最简单方法是什么?
类似的东西:
char inCharArray[3][255];
string outStringArray[3];
for (int i = 0; i < sizeof(inCharArray) / sizeof(inCharArray[i]); i++)
outStringArray[i] = inCharArray[i];
问候 蒂尔曼
【问题讨论】:
/*const*/std::string outStringArray[3]inCharArray[0], inCharArray[1], inCharArray[2];
?
/*const*/ std::vector<std::string> outStringArray(std::begin(inCharArray), std::end(inCharArray));
?
std::copy(std::begin(inCharArray), std::end(inCharArray), std::begin(outStringArray));
?
这些假设是 C 字符串。虽然 C 字符串始终是字符数组,但反之并不总是正确的。 OP应该澄清。
我喜欢 OP 如何被特别询问inCharArray
并回答outStringArray
。经典。
【参考方案1】:
使用 STL 算法是最好的方法之一。
char inCharArray[3][255];
string outStringArray[3];
std::transform(
std::begin(inCharrArray),
std::end(inCharArray),
std::begin(outStringArray),
[](char const* c_str) -> std::string
return std::stringc_str;
);
这是假设字符串的结束时间早于 255。
【讨论】:
【参考方案2】:std::transform
的替代方案对我来说更具可读性:
std::copy(std::begin(inCharArray),
std::end(inCharArray),
std::begin(outStringArray));
// only safe if input strings are null-terminated and arrays have equal size
static_assert(std::size(inCharArray) == std::size(outStringArray),
"arrays are not equal size");
在编写 C++ 代码时,还可以考虑使用 std::array
而不是 C 样式的数组。
【讨论】:
以上是关于二维字符数组到一维字符串数组的主要内容,如果未能解决你的问题,请参考以下文章