您的位置:首页 > 编程语言 > C语言/C++

C++ string split trim

2016-04-07 10:54 429 查看
</pre><pre name="code" class="cpp">
</pre><pre name="code" class="cpp">//注意:当字符串为空时,也会返回一个空字符串
void split(std::string& s, std::string& delim,std::vector< std::string >* ret)
{
size_t last = 0;
size_t index=s.find_first_of(delim,last);
while (index!=std::string::npos)
{
ret->push_back(s.substr(last,index-last));
last=index+1;
index=s.find_first_of(delim,last);
}
if (index-last>0)
{
ret->push_back(s.substr(last,index-last));
}
}


std::string& trim(std::string &s)
{
if (s.empty())
{
return s;
}

s.erase(0,s.find_first_not_of(" "));
s.erase(s.find_last_not_of(" ") + 1);
return s;
}


头文件:#include <string.h>

定义函数:char * strtok(char *s, const char *delim);

函数说明:strtok()用来将字符串分割成一个个片段。参数s 指向欲分割的字符串,参数delim 则为分割字符串,当strtok()在参数s 的字符串中发现到参数delim 的分割字符时则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s 字符串,往后的调用则将参数s 设置成NULL。每次调用成功则返回下一个分割后的字符串指针。

返回值:返回下一个分割后的字符串指针,如果已无从分割则返回NULL。

size_t Tokenizer(char *pszInput, char* pszSep, STRSET &Tokens)
{
char *pTok = strtok(pszInput, pszSep);
while(pTok != NULL )
{
Tokens.insert(string(pTok));
pTok=strtok(NULL, pszSep);
}

return Tokens.size();
}

//trim leading/trailing white spaces from a string
inline string Trim(const string& s)
{
if(s.length() == 0)
return s;
int beg = (int)s.find_first_not_of(" \a\b\f\n\r\t\v");
int end = (int)s.find_last_not_of(" \a\b\f\n\r\t\v");
if(beg == string::npos) // No non-spaces
return "";
return string(s, beg, end - beg + 1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: