字符串处理函数

#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;
		
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值