一。前言
程式中經常會遇到要處理用某些符號(如空格,或「, ; . | /t」等)分隔的字串的問題,我在此做了一些總結和比較。
二。處理方法
1. 用mfc cstring之find處理字串
// 以下方法將乙個字串分解後放到乙個cstringarray中:
void extractstring(cstringarray& arr, const cstring strsrc, const cstring sep = "/r/n" )
arr.add(str); // think }
// btw,cstring提供了trimleft和trimright,卻不能一次trimall,並返回trim後的字串,我寫了乙個:
cstring trimall(cstring str, cstring strtrim = " ")
// 同樣是用find處理字串,和以上處理方式稍有不同,試比較:
void extractstring2(cstringarray& arr, const cstring strsrc, const cstring sep = "/r/n" )}}
2. 用mfc未公開函式afxextractsubstring 處理
// 以下為函式定義及說明:
// afxextractsubstring 從乙個字元(chsep)分隔的字串(lpszfullstring)中取出第isubstring個子串,輸出到rstring
bool afxapi afxextractsubstring (
cstring& rstring, // 用於輸出子串
lpctstr lpszfullstring, // 被分隔的字串
int isubstring, // zero-based substring index
tchar chsep = '/n' // 分隔符)
// eg:
cstring sdesc= "張三|男|28|醫生";
cstring soccupation;
if(afxextractsubstring ( soccupation, sdesc, 3, '|'))
cout << "職業:" << soccupation << endl;
3. 用c語言之strtok函式處理
#include
void test()
free(temp);}
4. 其它方法
當然既然能用mfc的find函式進行處理,也可能string的find處理,甚至可用最原始的字元比較,再配合一些字串處理函式進行處理。
但我覺得我提供的使用find類函式處理字串的2種方法非常常用,可供參考。
三。比較
處理方法 優
劣用mfc cstring之find處理字串
分隔符可是是字元或字串;
在mfc中是最常用的方法。
僅限於mfc中使用
用afxextractsubstring 處理
完全封裝,呼叫簡單;
分隔符可是是字元或字串。
僅限於mfc中使用,且未公開;
一般用於取其中某個子串。
用c語言之strtok函式處理
分隔符可以同時指定多個字元,可用於分隔符不是很確定的情況。
分隔符只能是字元;
c庫函式,在c相容開發環境中通用。
四。後記
以上只是我從個人的角度做的乙個小結(我用mfc/c++多一些),難免有失偏頗,在bcb/delphi中肯定也有對應的方式方法,不在本文的討論範圍內,這裡就不再贅述。
DP總結 字串 子串
題目描述 有兩個僅包含小寫英文本母的字串a和b。現在要從字串a中取出k個互不重疊的非空子串,然後把這k個子串按照其在字串a中出現的順序依次連線起來得到乙個新的字串,請問有多少種方案可以使得這個新串與字串b相等?注意 子串取出的位置不同也認為是不同的方案。由於答案可能很大,所以這裡要求輸出答案對1,0...
字串子串
定義變數 string this is a test 取字串長度,空格也算 從positon處提取字串,positon從0 開始.也可以認為是提取postion之後字串,不算position處 從position位置處取length長的字串.也可以 echo cut c 1 4,取1 4的字元,1 ...
字串 字串中數字子串的求和
題目 給定乙個字串str,求其中全部數字串所代表的數字之和。要求如下 忽略小數點字元,例如 a1.3 其中包含兩個數字1和3.如果緊貼數字子串的左側出現字元 當連續出現的數量為奇數時,則數字視為負,連續出現的數量為偶數時,則數字視為正。例如,a 1bc 12 其中包含數字 1和12。舉例 str a...