如何将字符串指针中的字符复制到字符串向量?

时间:2016-10-08 11:27:25

标签: c++ string pointers vector

我有一个字符数组,packet是指向这个数组的指针。我想将此数组的中间部分复制到字符串向量:

void TCP::new_packet(flow_info key, const u_char* packet, time_t timer){
    std::vector(std::string);   
    //I want to add bytes 3 to 7 of the packet to the vector!
}

我可以做谁?

4 个答案:

答案 0 :(得分:3)

  

我想将此数组的中间部分复制到字符串向量:

如果目标是将char数组的一部分复制到std::string,请使用带有指向char和大小的指针的std::string constructor (4)

void TCP::new_packet(flow_info key, const u_char* packet, time_t timer)
{
    std::vector<std::string> v;

    // I want to add bytes 3 to 7 of the packet to the vector
    v.push_back(std::string(packet+3, 5));
}

Live Example

编辑:

由于您正在使用u_char,因此您可以创建一个简单的功能来完成工作:

#include <iostream>
#include <string>
#include <vector>
#include <cstdint>

using namespace std;

void addToVector(const u_char* data, std::vector<std::string>& v, 
                 int start, int end)
{
    v.push_back(std::string(reinterpret_cast<const char *>(data) + start, 
                end - start + 1));
}

int main() 
{
    const u_char p[] = "abc123456";
    std::vector<std::string> v;
    addToVector(p, v, 3, 7);
    std::cout << v[0];
}

Live Example 2

答案 1 :(得分:1)

这是

 std::string str = "This is a test!";
 strings.push_back(str.substr(3, 4));

这是什么??:

u_char *middle;
middle = &str;

答案 2 :(得分:0)

您可以使用std::copy_n

将您想要执行的操作建立在以下代码的基础之上

http://en.cppreference.com/w/cpp/algorithm/copy_n http://en.cppreference.com/w/cpp/iterator/advance

const std::string str { "123456789" };
std::vector<char> sub;
auto iter = std::begin(str);
// use advance to make this clear when you read.
std::advance(iter, 3);
// from where the advance left the iterator, and go fw 4 positions.
std::copy_n(iter, 4, std::back_inserter(sub));
for (auto c: sub) {
    std::cout << c << "\n";
}

Try it!

答案 3 :(得分:-1)

我不知道为什么你需要中间的变量, 但是如果你想将一片字符串复制到一个 “vector(string)”,然后首先需要构造一个新的字符串来保存原始字符串str.code的片段,如下所示:

string temp;    
for(int i=3;i<8;i++)
{
    temp.push_back(str[i]);
}
strings.push_back(temp);