• 去除C++String的首尾空格


    #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;
    }

  • 相关阅读:
    一个matlab小程序:挑出沪市A股年报与一季度报在同一天发布的股票
    AWK
    matlab搜索路径
    从新浪财经上下载交易明细数据并统计每天的买卖笔数(shell 命令行)
    AWK截取字符串
    tar GNU
    工作效率上的错觉(转载)
    matlab双精度浮点数编码及区间覆盖(原创)
    DNS服务器设置(Ubuntu10.04)
    sed
  • 原文地址:https://www.cnblogs.com/xuxm2007/p/1896925.html
Copyright © 2020-2023  润新知