二维字符数组到一维字符串数组

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&lt;std::string&gt; 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 样式的数组。

【讨论】:

以上是关于二维字符数组到一维字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

一维数组 二维数组 字符数组 处理字符串的函数

C语言一维数组转二维数组

江哥带你玩转C语言| 12 -二维数组和字符串

指针与一维数组和二维数组以及字符串指针数组的学习笔记

将二维指针数组中的字符串分配给一维指针数组

C-二维数组, 字符串, 指针