/// @file StrKit.h
/// @brief 声明#StrKit类
/// @author Artan
/// @date 2019年11月17日
/// @version 1.0.0.1
#ifndef _STRKIT_H
#define _STRKIT_H
/// @brief 字符串工具包
class StrKit {
public:
/// @brief 字符串拼接
/// @return 拼接后的字符串
static string strcat (
char const* str1, ///< [in] 字符串1
char const* str2, ///< [in] 字符串2
... ///< [in] 字符串n
);
/// @brief 字符串修剪
/// @return 被修剪过的参数字符串本身
/// @remark 截去字符串的首尾空白字符(空格、制表、回车、换行等)
static string& trim (
string& str ///< [in,out] 待修剪字符串
);
/// @brief 字符串拆分
/// @return 被拆分出的子串向量
/// @remark 以delim中的字符作为分隔符,对str字符串进行拆分,并对每个被拆分出的子串做修剪,拆分次数不超过limit,除非该参数的值为0
static vector<string> split (
string const& str, ///< [in] 待拆分字符串
string const& delim, ///< [in] 分隔符字符串
int limit = 0 ///< [in] 拆分次数限制
);
};
#endif // _STRKIT_H
#include "StrKit.h"
string StrKit::strcat (
char const* str1, ///< [in] 字符串1
char const* str2, ///< [in] 字符串2
... ///< [in] 字符串n
)
{
string path;
path=str1;
path+=str2;
va_list ap;
va_start(ap,str2);
while(char *str=va_arg(ap, char *))
{
path+=str;
}
return path;
}
string& StrKit::trim (
string& str ///< [in,out] 待修剪字符串
)
{
unsigned int begin = str.find_first_not_of("\t\r\n");
unsigned int end = str.find_last_not_of("\t\r\n");
if(begin==string::npos||end==string::npos)
{
str.clear();
}
else
return str=str.substr( begin, end-begin+1);
//unsigned int spacebegin = str.find_first_not_of(" ");
// unsigned int spaceend = str.find_last_not_of(" ");
//str.substr( spacebegin, spaceend-spacebegin+1);
//return str.substr( begin, end-begin+1);
}
vector<string> StrKit::split (
string const& str, ///< [in] 待拆分字符串
string const& delim, ///< [in] 分隔符字符串
int limit ///< [in] 拆分次数限制
)
{
vector<string> strv;
string ctostr;
char *strc=new char[strlen(str.c_str())+1];
//char *strc =new char[strlen(src.c_str()+1)];
strcpy(strc,str.c_str());
char *cobj=strtok(strc,delim.c_str());
ctostr=cobj;
strv.push_back(ctostr);
while( cobj!=NULL )
{
cobj = strtok(NULL, delim.c_str());
if( cobj==NULL ){
break;
}
ctostr=cobj;
strv.push_back(ctostr);
}
delete []strc;
return strv;
}