2016-11-10 12 views
0

我有字符数组这样的:用C字符串处理函数来解析char数组成C++的关键值映射

"CA: ABCD\0CB: ABFG\0CC: AFBV\0CD: 4567" 

现在从值": "分裂键,同时\0分离对。我想使用strchr或memchr函数将键值对添加到C++中的映射中。有什么建议么?

+1

我有一个建议。显示地图声明:) –

+4

你打算如何知道字符串的结尾?换句话说,你将如何确定哪一对是最后一个? –

+0

我只需要添加键和值我进入一个StringStringMap我已经定义了类似“values.insert(std :: pair (parsedKey,parsedValue))” – Anonymous

回答

0

东西沿着这些路线,也许是:

const char source[] = "CA: ABCD\0CB: ABFG\0CC: AFBV\0CD: 4567"; 
int len = sizeof(source); 
std::map<std::string, std::string> pairs; 

const char* end = source + len; 
const char* start = source; 
while (start < end) { 
    const char* sep = strchr(start, ':'); 
    const char* pair_end = strchr(sep + 2, '\0'); 
    pairs.emplace(std::string(start, sep), std::string(sep + 2, pair_end)); 
    start = pair_end + 1; 
} 

Demo

+0

我需要在地图中插入值。类似values.insert(std :: pair (parsedKey,parsedValue))。安地什么做什么? – Anonymous

+0

[精细手册](http://en.cppreference.com/w/cpp/container/map/emplace)说明了。如果你坚持,用等效的“insert”调用替换'emplace'调用是读者的一个练习。 –

+0

但是这段代码永远不会导致堆的违规行为吗? – Anonymous