Parse of key-value pair from string
$ dotnet add package SiddiqSoft.string2mapSimple C++17 library to aid in the parsing of HTTP headers into a STL map-type container.
Convert the input string with the specified delimiters into a map of key-value pairs with the given input:
: , :, =, = )string or wstring.map, multimap, unordered_map.namespace siddiqsoft::string2map
{
template <typename T, typename D = T, typename R = std::map<D, D>>
R parse(T& src, const T& keyDelimiter, const T& valueDelimiter, const T& terminalDelimiter= T{}) noexcept(false)
}
| typename | Type | Comment |
|---|---|---|
T | string or wstring | Type of the source string |
D | string or wstring | Type of the destination string (used in the container) |
R | map, unordered_map, multimap | Generally type is container<D,D> |
namespace siddiqsoft::string2vector
{
template <typename T>
std::vector<T> parse(const T& src, const T& keyDelimiter)
}
| typename | Type | Comment |
|---|---|---|
T | string or wstring | Type of the source string |
Get it from nuget or you can submodule it.
#include <string>
#include <map>
#include "siddiqsoft/string2map.hpp"
TEST(parse, Test_string2map)
{
std::string sampleStr{ "Host: duplicate\r\n"
"Host: hostname.com\r\n"
"Content-Type: text\r\n"
"Content-Length: 99\r\n\r\n" };
auto kvmap= siddiqsoft::string2map::parse<string, // input string
wstring, // transform to wstring
map<wstring,wstring> // destination container
>(sampleStr);
// We expect only 3 items even though there is a duplicate key in the source string.
// The std::map container ensures unique keys.
EXPECT_EQ(3, kvmap.size());
}
TEST(parse, Test_string2vector)
{
std::string sampleStr{ "/a/b/c/d" };
auto kv= siddiqsoft::string2vector::parse<string>(sampleStr);
EXPECT_EQ(4, kv.size());
}
© 2020 Siddiq Software LLC. All rights reserved. Refer to LICENSE.