不少其餘語言的libary都會有去除string類的首尾空格的庫函數,可是標準C++的庫卻不提供這個功能。可是C++string也提供很強大的功能,實現trim這種功能也不難。下面是幾種方法:
ios
1.使用string的find_first_not_of,和find_last_not_of方法c++
[cpp] view plaincopyweb
<EMBED id=ZeroClipboardMovie_1 height=18 name=ZeroClipboardMovie_1 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=1&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">正則表達式
/* app
Filename : StringTrim1.cpp 函數
Compiler : Visual C++ 8.0 oop
Description : Demo how to trim string by find_first_not_of & find_last_not_of spa
Release : 11/17/2006 .net
*/ 線程
#include <iostream>
#include <string>
std::string& trim(std::string &);
int main()
{
std::string s = " Hello World!! ";
std::cout << s << " size:" << s.size() << std::endl;
std::cout << trim(s) << " size:" << trim(s).size() << std::endl;
return 0;
}
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;
}
2.使用boost庫中的trim,boost庫對提供不少C++標準庫沒有可是又很是經常使用和好用的庫函數,例如正則表達式,線程庫等等。
[cpp] view plaincopy
<EMBED id=ZeroClipboardMovie_2 height=18 name=ZeroClipboardMovie_2 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=2&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
/*
Filename : boostStringTrim.cpp
Compiler : Visual C++ 8.0 / ISO C++ (boost)
Description : Demo how to boost to trim string
Release : 02/22/2007 1.0
*/
#include <iostream>
#include <string>
#include <boost/algorithm/string.hpp>
using namespace std;
using namespace boost;
int main() {
string s = " hello boost!! ";
trim(s);
cout << s << endl;
}
3.使用template(我用GCC編譯不經過,用VS2005卻能夠)
[cpp] view plaincopy
<EMBED id=ZeroClipboardMovie_3 height=18 name=ZeroClipboardMovie_3 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=3&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
/*
Filename : stringTrim1.cpp
Compiler : Visual C++ 8.0
Description : Demo how to trim string by other method.
Release : 11/18/2006
*/
#include <string>
#include <iostream>
#include <cwctype>
template <class T>
std::basic_string<T>& trim(std::basic_string<T>&);
int main( )
{
std::string s = " Hello World!! ";
std::cout << s << " size:" << s.size() << std::endl;
std::cout << trim(s) << " size:" << trim(s).size() << std::endl;
return 0;
}
template <class T>
std::basic_string<T>& trim(std::basic_string<T>& s)
{
if (s.empty()) {
return s;
}
std::basic_string<T>::iterator c;
// Erase whitespace before the string
for (c = s.begin(); c != s.end() && iswspace(*c++);); s.erase(s.begin(), --c);
// Erase whitespace after the string
for (c = s.end(); c != s.begin() && iswspace(*--c);); s.erase(++c, s.end());
return s;
}
[cpp] view plaincopy
<EMBED id=ZeroClipboardMovie_4 height=18 name=ZeroClipboardMovie_4 type=application/x-shockwave-flash align=middle pluginspage=http://www.macromedia.com/go/getflashplayer width=18 src=http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf wmode="transparent" flashvars="id=4&width=18&height=18" allowfullscreen="false" allowscriptaccess="always" bgcolor="#ffffff" quality="best" menu="false" loop="false">
//注意:當字符串爲空時,也會返回一個空字符串
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));
}
}