#include <iostream>
#include <string>
#include <vector>
#include <map>
#include <cstdarg>
#include <cstring>
using namespace std;
//格式化字符串
void format_str(string & str, const char * format, ...){
#define MAX_LINE 1024
va_list argList;
va_start(argList, format);
char buf[MAX_LINE] = {0};
vsprintf(buf, format, argList);
str = string(buf, MAX_LINE - 1);
va_end(argList);
}
//去除字符
void trim_left(string & str, const char * trims = " \t\r\n"){
string::size_type pos = str.find_first_not_of(trims);
if (pos != string::npos){
str.assign(str.substr(pos));
}else{
str.clear();
}
}
//
void trim_right(string & str, const char * trims = " \t\r\n"){
string::size_type pos = str.find_first_not_of(trims);
if (pos != string::npos){
str.assign(str.substr(0, pos + 1));
}else{
str.clear();
}
}
//
void trim_str(string & str, const char * trims = " \t\r\n"){
trim_left(str, trims);
trim_right(str, trims);
}
//字符串分割函数
void split_str(const string & str, std::vector<string> & subs_vec, const char * spliters = ",;"){
subs_vec.clear();
string::size_type pos, last_pos;
last_pos = pos = 0;
do{
pos = str.find_first_not_of(spliters, last_pos);
if (pos == string::npos){
break;
}
last_pos = str.find_first_of(spliters, pos);
string subs = str.substr(pos, last_pos - pos);
subs_vec.push_back(subs);
}while(last_pos != string::npos);
}
//attr=value
void split_av(const string & str, string & attr, string & val, const char * spliters = "="){
string::size_type pos = str.find_first_of(spliters);
if (pos != string::npos){
attr = str.substr(0, pos);
val = str.substr(pos + 1, str.length() - pos);
}
}
//name=xiaoming&age=78&local=anhui&abc=123&jkl=87&
void split_avs(const string & str, map<string, string> & av_map, const char * outer_spliters = ",;", const char * inner_spliters = "="){
vector<string> substr_vec;
split_str(str, substr_vec, outer_spliters);
av_map.clear();
for (size_t idx = 0; idx < substr_vec.size(); ++idx){
string attr, val;
split_av(substr_vec[idx], attr, val, inner_spliters);
av_map.insert(make_pair(attr, val));
}
}
int main(){
//
cout << "split_str:" << endl;
string str = "name=xiaoming&age=78&local=anhui&abc=123&jkl=87&";
vector<string> substr;
split_str(str, substr, "&");
for (size_t idx = 0; idx < substr.size(); ++idx){
cout << substr[idx] << endl;
}
//
cout << "split_avs:" << endl;
map<string, string> av_map;
split_avs(str, av_map, "&", "=");
for (map<string, string>::const_iterator cit = av_map.begin();
cit != av_map.end(); ++cit){
cout << cit->first << " = " << cit->second << endl;
}
//
str = "=name=xiaoming=";
string attr, val;
split_av(str, attr, val, "=");
cout << "split_av : " << str << "," << attr << "," << val << endl;
format_str(str, "23+29=%d", 23+29);
//
cout << "format_str:" << str << endl;
}
07-31
07-31
07-31