C++ StringUtil split join to_string

#include <string>
#include <vector>
#include <sstream>
#include <iterator>
#include <algorithm>
#include <cctype>

namespace StringUtil {

	using std::string;
	using std::vector;
	using std::istringstream;
	using std::ostringstream;
	using std::istream_iterator;
	using std::back_inserter;

	void basic_split(const string& str, vector<string>& strs);
	void basic_split(const string& str, vector<string>& strs, const char sep);
	void split(const string& str, vector<string>& strs);
	void split(const string& str, vector<string>& strs, const char sep);
	
	void basic_join(vector<string>& strs, string& str, const char sep);
	void join(vector<string>& strs, string& str, const char sep = ' ');
	
	void trim(string& str);
	void left_trim(string& str);
	void right_trim(string& str);
	
	void lower(string& str);
	void upper(string& str);
	void captain(string& str);
	
	template <typename T> string to_string(T value);
	template <typename T> T string_to(string str, T value);
	
	
	vector<string> split(const string& str);
	vector<string> split(const string& str, const char sep);
	string join(vector<string>& strs, const char sep = ' ');
	string trim_new(string& str);
	string left_trim_new(string& str);
	string right_trim_new(string& str);
	string lower_new(string& str);
	string upper_new(string& str);
	string captain_new(string& str);
	
	void basic_split(const string& str, vector<string>& strs)
	{
		istringstream iss(str);
	    copy(istream_iterator<string>(iss), istream_iterator<string>(), back_inserter(strs));
	}
	void basic_split(const string& str, vector<string>& strs, const char sep)
	{
		int begin_idx = 0;
		int end_idx = str.find(sep);
		if (end_idx == -1) return;
		
		while (end_idx != -1) {
			strs.push_back(str.substr(begin_idx, end_idx-begin_idx));
			begin_idx = end_idx + 1;
			end_idx = str.find(sep, begin_idx);
		}
		strs.push_back(str.substr(begin_idx));
	}
	void split(const string& str, vector<string>& strs)
	{
		strs.clear();
		basic_split(str, strs);
	}
	void split(const string& str, vector<string>& strs, const char sep)
	{
		strs.clear();
		basic_split(str, strs, sep);
	}
	
	void basic_join(vector<string>& strs, string& str, const char sep)
	{
		for_each(strs.begin(), strs.end()-1, [&](const string& s) {
			str += s + sep;
		});
		str += strs[strs.size()-1];
	}
	void join(vector<string>& strs, string& str, const char sep)
	{
		str = "";
		basic_join(strs, str, sep);
	}
	void trim(string& str)
	{
		left_trim(str);
		right_trim(str);
	}
	void left_trim(string& str)
	{
		str.erase(0, str.find_first_not_of(' '));  
	}
	void right_trim(string& str)
	{
		str.erase(str.find_last_not_of(' ') + 1);
	}
	void lower(string& str)
	{
		for_each(str.begin(), str.end(), [&](char& ch) {
			ch = tolower(ch);
		});
	}
	void upper(string& str)
	{
		for_each(str.begin(), str.end(), [&](char& ch) {
			ch = toupper(ch);
		});
	}
	void captain(string& str)
	{
		lower(str);
		str[0] = toupper(str[0]);
	}
	
	template <typename T>
	string to_string(T value)
	{
		ostringstream oss;
		oss << value;
		return oss.str();
	}
	template <typename T>
	T string_to(string str, T value)
	{
		istringstream iss(str);
		iss >> value;
		return value;
	}
	
	vector<string> split(const string& str)
	{
		vector<string> strs;
		basic_split(str, strs);
	    return strs;
	}
	vector<string> split(const string& str, const char sep)
	{
		vector<string> strs;
		basic_split(str, strs, sep);
		return strs;
	}
	string join(vector<string>& strs, const char sep)
	{
		string str;
		basic_join(strs, str, sep);
		return str;
	}
	string trim_new(string& str)
	{
		string new_str = str;
		trim(new_str);
		return new_str;
	}
	string left_trim_new(string& str)
	{
		string new_str = str;
		left_trim(new_str);
		return new_str;
	}
	string right_trim_new(string& str)
	{
		string new_str = str;
		right_trim(new_str);
		return new_str;
	}
	string lower_new(string& str)
	{
		string new_str = str;
		lower(new_str);
		return new_str;
	}
	string upper_new(string& str)
	{
		string new_str = str;
		upper(new_str);
		return new_str;
	}
	string captain_new(string& str)
	{
		string new_str = str;
		captain(new_str);
		return new_str;
	}
}

 

转载于:https://my.oschina.net/u/3655970/blog/1649135

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值