字符串分割函数

  最近与字符串打交道相对多些,C++最痛苦的地方就是对字符串的操作太麻烦了,繁琐。
  很多时候都会需要一个字符串分割函数,还可能是把诸如 "key1=value1 & key2=value2"形式的字符串分割称key/value对。
  一直没找到合适的函数,干脆自己造一个。
  函数如下,功能就是将"key1=value1 & key2=value2"形式的字符串分割称key/value对,
  比如字符串"key1=value1 & key2=value2 & key3=value3&"将被分割为:
  key1=value1
  key2=value2
  key3=value3
  并存储在map中。 typedef std::map STR2STR_MAP; typedef std::pair STR2STR_PAIR; // seq_major & sep_minor SHOULD NOT BE space(' ' or '\t') // the function will escape spaces around sep_major void SplitStrings(const std::string &input, STR2STR_MAP &map, char sep_major = '&', char sep_minor = '=') { char *euq, *amp, *start, *tmp; char *pairs = new char[input.size() + 4]; memcpy(pairs, input.c_str(), input.size()); memcpy(pairs + input.size(), &sep_major, 1); pairs[input.size()+1] = '\0'; start = pairs; for(amp = strchr(start, sep_major); amp != NULL; amp = strchr(start, sep_major)) { *amp = '\0'; euq = strchr(start, sep_minor); if(euq == NULL) break; *euq = '\0'; euq++; tmp = amp-1; while((tmp != start) && ((*tmp == ' ') || (*tmp == '\t'))) tmp--; // escape ending space while((*start == ' ') || (*start == '\t')) start++; // escape leading space if((start != '\0') && (*euq != '\0')) { std::string key(start), value(euq); map.insert(STR2STR_PAIR(key, value)); } start = ++amp; } delete []pairs; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值