1. 程式人生 > >C++ string的trim, split方法

C++ string的trim, split方法

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

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

  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. std::string& trim(std::string &);

  10. int main()

  11. {

  12. std::string s = " Hello World!! ";

  13. std::cout << s << " size:" << s.size() << std::endl;

  14. std::cout << trim(s) << " size:" << trim(s).size() << std::endl;

  15. return 0;

  16. }

  17. std::string& trim(std::string &s)

  18. {

  19. if (s.empty())

  20. {

  21. return s;

  22. }

  23. s.erase(0,s.find_first_not_of(" "));

  24. s.erase(s.find_last_not_of(" ") + 1);

  25. return s;

  26. }


2.使用boost庫中的trim,boost庫對提供很多C++標準庫沒有但是又非常常用和好用的庫函式,例如正則表示式,執行緒庫等等。

  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. using namespace std;

  11. using namespace boost;

  12. int main() {

  13. string s = " hello boost!! ";

  14. trim(s);

  15. cout << s << endl;

  16. }


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

  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. template <class T>

  11. std::basic_string<T>& trim(std::basic_string<T>&);

  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. return 0;

  18. }

  19. template <class T>

  20. std::basic_string<T>& trim(std::basic_string<T>& s)

  21. {

  22. if (s.empty()) {

  23. return s;

  24. }

  25. std::basic_string<T>::iterator c;

  26. // Erase whitespace before the string

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

  28. // Erase whitespace after the string

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

  30. return s;

  31. }

split方法

  1. //注意:當字串為空時,也會返回一個空字串

  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. }

  12. if (index-last>0)

  13. {

  14. ret->push_back(s.substr(last,index-last));

  15. }

相關推薦

C 實現字串按多個字符采用Split方法分割

using System.Text.RegularExpressions;string str="aaajsbbbjsccc";string[] sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);foreach (string i in sArray)

C++ string的trim, split方法

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

c++ 一次完整讀檔案 及 實現string 的split方法

要把檔案的字串讀出,並將它分塊(split)。 首先檔案一行一行讀臺麻煩,網上搜了下,發現寶貝,一次讀取整個檔案到記憶體中, http://www.360doc.com/content/13/1101/01/14458144_325725835.shtml std::if

C#實現字串按多個字符采用Split方法分割得到陣列

string agentInfo = userInfo.Attribute19.ToString();             string[] myAgent = agentInfo.Split(new string[] { "$#$" }, StringSplitOptions.None);       

c#中Split 分離字元以及空格消除方法

c#中Split 分離字元以及空格消除方法 1        split幾種分離方法 1)用字串分隔:using System.Text.RegularExpressions;string str="aaajsbbbjsccc";string[] sArray=Rege

設計模式C++實現——工廠方法模式

對象 類型 begin 創建對象 dia rate rod rtu log 模式定義: 工廠方法模式定義了一個創建對象的接口,但由子類決定要實例化的類是哪一個。工廠方法讓類把實例化推遲到子類。 模式結構: Creator是一個類,它

C#中的方法傳參與switch、if結構(4)

判斷 1.2 菱形 條件表達式 執行 代碼 輸出 分類 簡易 一、方法傳參的2種方式    1、按值傳遞       傳遞的是值的副本,值會更改但未保留,值最終並未更改     2、按引用傳遞(形參用ref關鍵字修飾)【P86頁】 傳遞的是地址,值會更改且保留,值最終更改

Java Split()方法按點(.)切分註意細節

absolut int abs println clip nts image content con 按點(.)切分,必須要註意轉義!如:split("\\.")。 例子: [java] view plain copy print? public clas

c#類的方法表的建立和方法的調用

方法覆蓋 cep 過程 final 提高 用法比較 stat 構造過程 調用方法 對於方法的調用,很是令我頭疼,什麽靜態方法,實例方法,實例虛方法,這裏查了很多資料,總結如下: 這裏聲明,我也是菜鳥,這裏只討論方法的調用相關的技術,屬於個人理解,如有錯誤,請指正 思路:

C# Process.Start()方法詳解

stat 字符串 檔案 atd 一個 用戶名 菜單 簡單介紹 run System.Diagnostics.Process.Start(); 能做什麽呢?它主要有以下幾個功能: 1、打開某個鏈接網址(彈窗)。 2、定位打開某個文件目錄。 3、打開系統特殊文件夾,如“控制面板

C#中Split用法~字符串分隔

rec get 字符 說明 logs sep bbs options tle 1、用字符串分隔: using System.Text.RegularExpressions;string str="aaajsbbbjsccc";string[] sArray=

C#類、方法的訪問修飾符

屬性 tro nbsp 程序 .net art 支持 分析 方法 這篇文章主要介紹了C#類的訪問修飾符用法,較為詳細的分析了C#類的訪問修飾符概念與用法,具有一定的參考借鑒價值,需要的朋友可以參考下 本文詳細分析了C#類的訪問修飾符用法,分享給大家供大家參考。具體用法分析

區分slice,splice和split方法

表達式 log tor 數量 字符串 移除 cnblogs code col 1.slice(數組) 用法:array.slice(start,end) 解釋:該方法是對數組進行部分截取,並返回一個數組副本;參數start是截取的開始數組索引,end參數等於你要取的最後

c# 擴展方法奇思妙用基礎篇五:Dictionary<TKey, TValue> 擴展

ews public turn false div role 自我 cnblogs static Dictionary<TKey, TValue> 類是常用的一個基礎類,但用起來有時確不是很方便。本文逐一討論,並使用擴展方法解決。 向字典中添加鍵和值 添加鍵和值

C#_Excel操作方法匯總

pxn ugo sm4 方法 blank pcc 操作方法 exce mcs S付qcd杜Co肇戮2http://www.zcool.com.cn/collection/ZMTg0MTYyNzI=.html 2野1室4a凹韌84赫shttp://www.zcool.com

20、C#裏面方法的創建和顯示

c#在C#裏面,和Java也是一樣的,都是可以創建方法的。這裏所說的方法,就是其它編程語言裏面的函數、子程序、過程等。創建的方法有兩種:一種是沒有返回值的方法。一種是有返回值的方法。無論是哪種方法,其實都是很簡單的。實例:沒有返回值的方法的定義和使用 public static void Main

string通過逗號分割不用split方法

new 不用 ray rgs bst mon java sys port package com.simon; import java.util.ArrayList; import java.util.Iterator; import java.util.Li

C#擴展方法(Extend Method)

return res string 調用 rabl 靜態類 edas exceptio new C#擴展方法(Extend Method) 在不更改原來類的基礎上,為類添加方法。 1,擴展方法必須寫靜態類中 2,擴展方法必須是靜態方法,雖然是靜態方法,但是這個擴張方

C#中抽象方法與虛擬方法的區別

的人 -a 對象 abstract 數據 style html tools mar 學過C#的人應該都知道抽象方法與虛擬方法,而很多初學者對二者之間的區別並不是很了解。今天本文就來分析一下二者之間的區別。並附上實例加以說明。具體分析如下: 一、主要區別: 對於抽象方

Java 字符串Split方法的一個坑

static pub view div nbsp lang ray 負數 pri java字符串的split,只傳一個參數,後面空白的字符串會被忽略: public static void main(String[] args) { String st