以零字节作为定界符/终端的字节加入(连接)字符串向量

Join (concatenate) vector of strings to char buffer with zero byte as delimiter/terminator

本文关键字:字节 连接 字符串 向量 终端 定界符      更新时间:2023-10-16

是否有更好的方法将字符串向量转换为字符串之间零终端的字符向量。

因此,如果我有一个带有以下字符串"test","my","string"的向量,那么我想接收一个chars的向量: "testmystring"

此刻此代码效果很好,但是有更好(更漂亮(的解决方案吗?

std::vector<std::string> string_array = {"test", "my", "string"};
std::vector<char> buffer_temp;
for (auto &str : string_array)
{
    for (auto &chr : str)
    {
        buffer_temp.push_back(chr);
    }
    buffer_temp.push_back('');
}

永远不要忘记std::vector::insert方法可以简化您的示例如下:

std::vector<std::string> string_array = { "test", "my", "string" };
std::vector<char> buffer_temp;
for(auto& s : string_array)
    buffer_temp.insert(buffer_temp.end(), s.c_str(), s.c_str() + s.size() + 1);

std::string::c_str将指针返回到零端的字符数组,因此您不必将额外的''附加到来自string_array的每个元素的末尾。


回复下面的评论,您也可以使用std::string迭代器,并且由于std::string具有随机访问迭代器,您可以执行以下操作:

for(auto& s : string_array)
    buffer_temp.insert(buffer_temp.end(), s.begin(), s.end() + 1);

直接复制字符串数据的速度可能更快。

 std::vector<std::string> string_array = {"test", "my", "string"};
 int size = 0;
 for (auto &str : string_array)
 {
     size += str.size()+1;
 }
 char * buffer = new char[size];
 int cursor = 0;
 for (auto &str : string_array)
 {
     memcpy(&buffer[cursor], str.data(), str.size());
     cursor += str.size()+1;
     buffer[cursor-1] = '';
 }