#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <cstring>
#include <string>
using namespace std;
struct kvpair {
/* Pointers to the key and value data */
void *key;
void *value;
/* Size of the key and value data in bytes */
uint32_t keysz;
uint32_t valuesz;
};
vector<struct kvpair> parseWordcInput (string line, string delimiters) {
struct kvpair kv;
size_t pos_start = 0, pos_end, delim_len = delimiters.length();
vector<struct kvpair> res;
while ((pos_end = line.find (delimiters, pos_start)) != string::npos) {
string token;
token = line.substr (pos_start, pos_end - pos_start);
pos_start = pos_end + delim_len;
char *cstr1 = new char[token.length() + 1];
strcpy(cstr1, token.c_str());
cstr1[token.length()] = '\0';
//kv.key = static_cast<void*>(&token);
kv.key = (void *)cstr1;
kv.keysz = token.length() + 1;
kv.value = NULL;
kv.valuesz = 0;
res.push_back (kv);
}
string token = line.substr (pos_start);
kv.key = static_cast<void*>(&token);
kv.keysz = token.length()+1;
kv.value = NULL;
kv.valuesz = 0;
res.push_back (kv);
return res;
}
int main() {
string str = "adsf-+qwret-+nvfkbdsj-+orthdfjgh-+dfjrleih";
string delimiters = "-+";
vector<struct kvpair> kvpairs = parseWordcInput (str, delimiters);
for (auto i : kvpairs) cout << i.key <<" "<< i.keysz << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGNzdHJpbmc+CiNpbmNsdWRlIDxzdHJpbmc+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGt2cGFpciB7CgkvKiBQb2ludGVycyB0byB0aGUga2V5IGFuZCB2YWx1ZSBkYXRhICovCgl2b2lkICprZXk7Cgl2b2lkICp2YWx1ZTsKCgkvKiBTaXplIG9mIHRoZSBrZXkgYW5kIHZhbHVlIGRhdGEgaW4gYnl0ZXMgKi8KCXVpbnQzMl90IGtleXN6OwoJdWludDMyX3QgdmFsdWVzejsKfTsKCnZlY3RvcjxzdHJ1Y3Qga3ZwYWlyPiBwYXJzZVdvcmRjSW5wdXQgKHN0cmluZyBsaW5lLCBzdHJpbmcgZGVsaW1pdGVycykgewogICAgc3RydWN0IGt2cGFpciBrdjsKICAgIHNpemVfdCBwb3Nfc3RhcnQgPSAwLCBwb3NfZW5kLCBkZWxpbV9sZW4gPSBkZWxpbWl0ZXJzLmxlbmd0aCgpOwogICAgdmVjdG9yPHN0cnVjdCBrdnBhaXI+IHJlczsKCiAgICB3aGlsZSAoKHBvc19lbmQgPSBsaW5lLmZpbmQgKGRlbGltaXRlcnMsIHBvc19zdGFydCkpICE9IHN0cmluZzo6bnBvcykgewogICAgICAgIHN0cmluZyB0b2tlbjsKICAgICAgICB0b2tlbiA9IGxpbmUuc3Vic3RyIChwb3Nfc3RhcnQsIHBvc19lbmQgLSBwb3Nfc3RhcnQpOwogICAgICAgIHBvc19zdGFydCA9IHBvc19lbmQgKyBkZWxpbV9sZW47CiAgICAgICAgY2hhciAqY3N0cjEgPSBuZXcgY2hhclt0b2tlbi5sZW5ndGgoKSArIDFdOwogICAgICAgIHN0cmNweShjc3RyMSwgdG9rZW4uY19zdHIoKSk7CiAgICAgICAgY3N0cjFbdG9rZW4ubGVuZ3RoKCldID0gJ1wwJzsKICAgICAgICAvL2t2LmtleSA9IHN0YXRpY19jYXN0PHZvaWQqPigmdG9rZW4pOwogICAgICAgIGt2LmtleSA9ICh2b2lkICopY3N0cjE7CiAgICAgICAga3Yua2V5c3ogPSB0b2tlbi5sZW5ndGgoKSArIDE7CiAgICAgICAga3YudmFsdWUgPSBOVUxMOwogICAgICAgIGt2LnZhbHVlc3ogPSAwOwoKICAgICAgICByZXMucHVzaF9iYWNrIChrdik7CiAgICB9CiAgICAKICAgIHN0cmluZyB0b2tlbiA9IGxpbmUuc3Vic3RyIChwb3Nfc3RhcnQpOwogICAga3Yua2V5ID0gc3RhdGljX2Nhc3Q8dm9pZCo+KCZ0b2tlbik7CiAgICBrdi5rZXlzeiA9IHRva2VuLmxlbmd0aCgpKzE7ICAgICAgICAKICAgIGt2LnZhbHVlID0gTlVMTDsKICAgIGt2LnZhbHVlc3ogPSAwOyAgICAKICAgIHJlcy5wdXNoX2JhY2sgKGt2KTsKCiAgICByZXR1cm4gcmVzOwp9CgppbnQgbWFpbigpIHsKICAgIHN0cmluZyBzdHIgPSAiYWRzZi0rcXdyZXQtK252ZmtiZHNqLStvcnRoZGZqZ2gtK2RmanJsZWloIjsKICAgIHN0cmluZyBkZWxpbWl0ZXJzID0gIi0rIjsKICAgIHZlY3RvcjxzdHJ1Y3Qga3ZwYWlyPiBrdnBhaXJzID0gcGFyc2VXb3JkY0lucHV0IChzdHIsIGRlbGltaXRlcnMpOwoKICAgIGZvciAoYXV0byBpIDoga3ZwYWlycykgY291dCA8PCBpLmtleSA8PCIgIjw8IGkua2V5c3ogPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==