鸿 网 互 联 www.68idc.cn

当前位置 : 服务器租用 > 编程语言开发 > c++ > >

基于std::string的c++字符串工具类,方便的实现string的构造、追

来源:互联网 作者:佚名 时间:2016-07-01 16:53
std::string的构造和相互转化十分不便,自己项目中使用的一个std::string的封装类,std::string的一切性质都可以使用,添加了多种string构造方法和其它数据类型的转化。 无 /***基于std::string的c++字符串工具类,方便的实现string的构造、追加和相互转换*/c
std::string的构造和相互转化十分不便,自己项目中使用的一个std::string的封装类,std::string的一切性质都可以使用,添加了多种string构造方法和其它数据类型的转化。 <无>
/**
*基于std::string的c++字符串工具类,方便的实现string的构造、追加和相互转换
*/
class BscString : public std::string
{

public:
	/**
	*基础构造
	*/
    BscString() {
    }
	/**
	*基本变量构造函数如:bool,int,double等
	*/
    template < typename T >
	BscString(T const &val) {
        stringstream ss;
		ss << fixed << setprecision(4) << val;
		std::string::append(ss.str());
    }
	/**
	*指针变量构造函数如:char*
	*/
	template < typename T >
	BscString(T* val) {
		stringstream ss;
		ss << fixed << setprecision(4) << val;
		std::string::append(ss.str());
	}
	/**
	*变量转换为string并追加到末尾
	*/
    template < typename T >
    BscString& append(T const &val) {
        stringstream ss;
        ss << fixed << setprecision(4) << val;
        std::string::append(ss.str());
		return *this;
    }
	/**
	*字符串转换为string并追加到末尾
	*/
	template < typename T >
	BscString& append(T* val) {
        stringstream ss;
        ss << fixed << setprecision(4) << val;
        std::string::append(ss.str());
		return *this;
    }
	/**
	*字符串转换为变量如:bool,int,long,double
	*/
    template < typename T >
    void toValue(T &val) {
        stringstream ss(*this);
		ss >> val;
    }
	/**
	*赋值T到string
	*/
    template < typename T >
    void operator = (T const &val) {
		stringstream ss;
		std::string::clear();
		ss << fixed << setprecision(4) << val;
		std::string::append(ss.str());
    }
	/**
	*赋值T*到string
	*/
	template < typename T >
	void operator = (T* val) {
		stringstream ss;
		std::string::clear();
		ss << fixed << setprecision(4) << val;
		std::string::append(ss.str());
	}
	/**
	*等同于append(T const &val)
	*/
    template < typename T >
    BscString& operator << (T const &val) {
        return append(val);
    }
	/**
	*等同于append(T* val)
	*/
	template < typename T >
	BscString& operator << (T* val) {
		return append(val);
	}
	
	/**
	*等同于toValue(T &val)
	*/
    template < typename T >
    void operator >> (T &val) {
		stringstream ss(*this);
		ss >> val;
    }
	/************regex**************/
	bool regexMatch(const std::string &reg){
		const std::regex pattern(reg);
		return std::regex_match(*this, pattern);
	}

	bool regexMatch(const char* reg){
		const std::regex pattern(reg);
		return std::regex_match(*this, pattern);
	}

	/**************string*****************/

	bool contains(const std::string &prefix){
		return find(prefix) != -1;
	}

	bool startsWith(const std::string &prefix){
		return find(prefix) == 0;
	}

	bool endsWith(const std::string &prefix){
		return find(prefix) == (size() - prefix.size());
	}

	std::vector<std::string> split(std::string separator)
	{
		std::vector<std::string> result;
		string str(*this);
		int cutAt;
		while ((cutAt = str.find_first_of(separator)) != str.npos)
		{
			if (cutAt > 0)
			{
				result.push_back(str.substr(0, cutAt));
			}
			else{
				result.push_back("");
			}
			str = str.substr(cutAt + 1);
		}
		if (str.length() > 0)
		{
			result.push_back(str);
		}
		else{
			result.push_back("");
		}
		return result;
	}
};
#ifndef CTP_BASIC_BSCSTRING_H_
#define CTP_BASIC_BSCSTRING_H_

#include <stdio.h>
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <cstdlib>
#include <regex>
using namespace std;

/**
*基于std::string的c++字符串工具类,方便的实现string的构造、追加和相互转换
*/
class BscString : public std::string
{

public:
	/**
	*基础构造
	*/
    BscString() {
    }
	/**
	*基本变量构造函数如:bool,int,double等
	*/
    template < typename T >
	BscString(T const &val) {
        stringstream ss;
		ss << fixed << setprecision(4) << val;
		std::string::append(ss.str());
    }
	/**
	*指针变量构造函数如:char*
	*/
	template < typename T >
	BscString(T* val) {
		stringstream ss;
		ss << fixed << setprecision(4) << val;
		std::string::append(ss.str());
	}
	/**
	*变量转换为string并追加到末尾
	*/
    template < typename T >
    BscString& append(T const &val) {
        stringstream ss;
        ss << fixed << setprecision(4) << val;
        std::string::append(ss.str());
		return *this;
    }
	/**
	*字符串转换为string并追加到末尾
	*/
	template < typename T >
	BscString& append(T* val) {
        stringstream ss;
        ss << fixed << setprecision(4) << val;
        std::string::append(ss.str());
		return *this;
    }
	/**
	*字符串转换为变量如:bool,int,long,double
	*/
    template < typename T >
    void toValue(T &val) {
        stringstream ss(*this);
		ss >> val;
    }
	/**
	*赋值T到string
	*/
    template < typename T >
    void operator = (T const &val) {
		stringstream ss;
		std::string::clear();
		ss << fixed << setprecision(4) << val;
		std::string::append(ss.str());
    }
	/**
	*赋值T*到string
	*/
	template < typename T >
	void operator = (T* val) {
		stringstream ss;
		std::string::clear();
		ss << fixed << setprecision(4) << val;
		std::string::append(ss.str());
	}
	/**
	*等同于append(T const &val)
	*/
    template < typename T >
    BscString& operator << (T const &val) {
        return append(val);
    }
	/**
	*等同于append(T* val)
	*/
	template < typename T >
	BscString& operator << (T* val) {
		return append(val);
	}
	
	/**
	*等同于toValue(T &val)
	*/
    template < typename T >
    void operator >> (T &val) {
		stringstream ss(*this);
		ss >> val;
    }
	/************regex**************/
	bool regexMatch(const std::string &reg){
		const std::regex pattern(reg);
		return std::regex_match(*this, pattern);
	}

	bool regexMatch(const char* reg){
		const std::regex pattern(reg);
		return std::regex_match(*this, pattern);
	}

	/**************string*****************/

	bool contains(const std::string &prefix){
		return find(prefix) != -1;
	}

	bool startsWith(const std::string &prefix){
		return find(prefix) == 0;
	}

	bool endsWith(const std::string &prefix){
		return find(prefix) == (size() - prefix.size());
	}

	std::vector<std::string> split(std::string separator)
	{
		std::vector<std::string> result;
		string str(*this);
		int cutAt;
		while ((cutAt = str.find_first_of(separator)) != str.npos)
		{
			if (cutAt > 0)
			{
				result.push_back(str.substr(0, cutAt));
			}
			else{
				result.push_back("");
			}
			str = str.substr(cutAt + 1);
		}
		if (str.length() > 0)
		{
			result.push_back(str);
		}
		else{
			result.push_back("");
		}
		return result;
	}
};

#endif //CTP_BASIC_BSCSTRING_H_

网友评论
<