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

C++之从头开始(6)String 剔除 空格

2013-11-22 23:27 225 查看
很多其他语言的libary都会有去除string类的首尾空格的库函数,但是标准C++的库却不提供这个功能。但是C++string也提供很强大的功能,实现trim这种功能也不难。下面是几种方法:

1.使用string的find_first_not_of,和find_last_not_of方法

/*

Filename : StringTrim1.cpp

Compiler : Visual C++ 8.0

Description : Demo how to trim string by find_first_not_of & find_last_not_of

Release : 11/17/2006

*/

#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++标准库没有但是又非常常用和好用的库函数,例如正则表达式,线程库等等。

/*

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却可以)

/*

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>&); [Page]

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: