去除C++String的首尾空格

来源:互联网 发布:windows运维 书籍 编辑:程序博客网 时间:2024/05/17 04:40

#include   <string> 
#include   <algorithm> 
#include   <functional> 
#include   <cctype> 
using   namespace   std; 
inline   string&   ltrim(string   &ss) 

              int   (*pf)(int)=isspace; 
              string::iterator   p=find_if(ss.begin(),ss.end(),not1(ptr_fun(pf))); 
              ss.erase(ss.begin(),p); 
              return   ss; 

inline   string&   rtrim(string   &ss) 

              int   (*pf)(int)=isspace; 
              string::reverse_iterator   p=find_if(ss.rbegin(),ss.rend(),not1(ptr_fun(pf))); 
              ss.erase(p.base(),ss.end()); 
              return   ss; 

inline   string&   trim(string   &st) 

              ltrim(rtrim(st)); 
              return   st; 

  

http://blog.chinaunix.net/u1/41728/showart_361368.html

http://blog.sina.com.cn/s/blog_4f27dbd50100cuwe.html 

 string trim(string& s)

{
    const string drop = " ";
    // trim right
    s.erase(s.find_last_not_of(drop)+1);
    // trim left
    return s.erase(0,s.find_first_not_of(drop));
}

string ltrim(string& s)
{
    const string drop = " ";
    // trim left
    return s.erase(0,s.find_first_not_of(drop));
}
string rtrim(string& s)
{
    const string drop = " ";
    // trim right
    return    s.erase(s.find_last_not_of(drop)+1);

}

 

 

 很多其他语言的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>&);

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 (= s.begin(); c != s.end() && iswspace(*c++);); s.erase(s.begin(), --c);

    // Erase whitespace after the string

    for (= s.end(); c != s.begin() && iswspace(*--c);); s.erase(++c, s.end());

    return s;
}

0 0
原创粉丝点击