字符串分割函數

  最近與字符串打交道相對多些,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; }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章