[轉]C++ string的trim, split方法

來源:互聯網
上載者:User

標籤:

很多其他語言的libary都會有去除string類的首尾空格的庫函數,但是標準C++的庫卻不提供這個功能。但是C++string也提供很強大的功能,實現trim這種功能也不難。下面是幾種方法:

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

[cpp] view plaincopy
  1. /*  
  2. Filename : StringTrim1.cpp 
  3. Compiler : Visual C++ 8.0 
  4. Description : Demo how to trim string by find_first_not_of & find_last_not_of 
  5. Release : 11/17/2006 
  6.  */  
  7. #include <iostream>  
  8. #include <string>  
  9.   
  10. std::string& trim(std::string &);  
  11.   
  12. int main()   
  13. {  
  14.     std::string s = " Hello World!! ";  
  15.     std::cout << s << " size:" << s.size() << std::endl;  
  16.     std::cout << trim(s) << " size:" << trim(s).size() << std::endl;  
  17.   
  18.     return 0;  
  19. }  
  20.   
  21. std::string& trim(std::string &s)   
  22. {  
  23.     if (s.empty())   
  24.     {  
  25.         return s;  
  26.     }  
  27.   
  28.     s.erase(0,s.find_first_not_of(" "));  
  29.     s.erase(s.find_last_not_of(" ") + 1);  
  30.     return s;  
  31. }  

2.使用boost庫中的trim,boost庫對提供很多C++標準庫沒有但是又非常常用和好用的庫函數,例如Regex,線程庫等等。

[cpp] view plaincopy
  1. /*  
  2. Filename : boostStringTrim.cpp 
  3. Compiler : Visual C++ 8.0 / ISO C++ (boost) 
  4. Description : Demo how to boost to trim string 
  5. Release : 02/22/2007 1.0 
  6. */  
  7. #include <iostream>  
  8. #include <string>  
  9. #include <boost/algorithm/string.hpp>  
  10.   
  11. using namespace std;  
  12. using namespace boost;  
  13.   
  14. int main() {  
  15.   string s = " hello boost!! ";  
  16.   trim(s);  
  17.   cout << s << endl;  
  18. }  

3.使用template(我用GCC編譯不通過,用VS2005卻可以)

[cpp] view plaincopy
  1. /*  
  2. Filename : stringTrim1.cpp 
  3. Compiler : Visual C++ 8.0 
  4. Description : Demo how to trim string by other method. 
  5. Release : 11/18/2006 
  6. */  
  7. #include <string>  
  8. #include <iostream>  
  9. #include <cwctype>  
  10.   
  11. template <class T>  
  12. std::basic_string<T>& trim(std::basic_string<T>&);  
  13.   
  14. int main( )   
  15. {  
  16.     std::string s = " Hello World!! ";  
  17.     std::cout << s << " size:" << s.size() << std::endl;  
  18.     std::cout << trim(s) << " size:" << trim(s).size() << std::endl;  
  19.   
  20.     return 0;  
  21. }  
  22.   
  23. template <class T>  
  24. std::basic_string<T>& trim(std::basic_string<T>& s)   
  25. {  
  26.     if (s.empty()) {  
  27.         return s;  
  28.   }  
  29.   
  30.     std::basic_string<T>::iterator c;  
  31.     // Erase whitespace before the string  
  32.   
  33.     for (c = s.begin(); c != s.end() && iswspace(*c++);); s.erase(s.begin(), --c);  
  34.   
  35.     // Erase whitespace after the string  
  36.   
  37.     for (c = s.end(); c != s.begin() && iswspace(*--c);); s.erase(++c, s.end());  
  38.   
  39.     return s;  
  40. }  


split方法 [cpp] view plaincopy
  1. //注意:當字串為空白時,也會返回一個Null 字元串  
  2. void split(std::string& s, std::string& delim,std::vector< std::string >* ret)  
  3. {  
  4.     size_t last = 0;  
  5.     size_t index=s.find_first_of(delim,last);  
  6.     while (index!=std::string::npos)  
  7.     {  
  8.         ret->push_back(s.substr(last,index-last));  
  9.         last=index+1;  
  10.         index=s.find_first_of(delim,last);  
  11.     }  

[轉]C++ string的trim, split方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.