Как скопировать символы из строкового указателя в строковый вектор?

У меня есть массив символов и 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

Решение

Я хочу скопировать среднюю часть этого массива в вектор строк:

Если цель состоит в том, чтобы скопировать часть массива char в std::string, использовать 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));
}

Живой пример


Редактировать:

Так как вы используете 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];
}

Живой Пример 2

3

Другие решения

Вот

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

И что это ??

u_char *middle;
middle = &str;
1

Вы можете основать то, что вы хотите сделать с помощью следующего фрагмента кода, используя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";
}

Попытайся!

0

Я не знаю, зачем вам переменная среднего,
но если вы хотите скопировать фрагмент строки в
«vector (string)», затем сначала вам нужно создать новую строку для хранения фрагмента исходной строки str.code следующим образом:

string temp;
for(int i=3;i<8;i++)
{
temp.push_back(str[i]);
}
strings.push_back(temp);
-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector