cstring怎麼切割
1. MFC中幾種常用的字元串分割方法
1、CString 自帶的函數Tokenize
CStringT Tokenize( _In_ PCXSTR pszTokens, _Inout_ int& iStart ) const
功能介紹:從iStart位置取出字元串中含pszTokens分割符間的內容;istart是開始分割的位置,一般設為0,下面是一段運用實例:
vector<CString> SplitCString(CString strSource, CString ch){ vector <CString> vecString; intiPos = 0; CString strTmp; strTmp = strSource.Tokenize(ch,iPos); while(strTmp.Trim() != _T("")) { vecString.push_back(strTmp); strTmp = strSource.Tokenize(ch,iPos); }}
上述函數將字元串strSource按照字元串ch進行分割,分割得帶的子字元串放到vector中。其中函數中的iPos是不斷變化的,而Tokenize本身不會改變源字元串。
2、char *strtok(char s[], const char *delim);
功能介紹:分解字元串為一組字元串。s為要分解的字元串,delim為分隔符字元串。首次調用時,s指向要分解的字元串,之後再次調用要把s設成NULL。從s開頭開始的一個個被分割的串。當查找不到delim中的字元時,返回NULL。所有delim中包含的字元都會被濾掉,並將被濾掉的地方設為一處分割的節點。下面是一段運用實例。
vector<CString> SplitCString(CString strSource, charch){ vector<CString> vecString; CString strTmp=strtok((LPSTR)(LPCTSTR)strSource,ch);//(LPSTR)(LPCTSTR)將CString轉char* while(1) { strTmp=strtok(NULL,ch); if(strTmp==_T("")) break; strTmp.TrimLeft(); vecString.push_back(strTmp); }}
與第一種方法有一點區別,上述函數第二個參數是char型的,第一種方法的第二個可以是CString型的,但是實現的功能相似。
3、BOOL AFXAPI AfxExtractSubString ( CString& rString, LPCTSTR lpszFullString, int iSubString, TCHAR chSep = 『\n』);
功能介紹:可用於從特定源字元串中提取子字元串。如果函數成功提取了該子字元串中提供的索引,返回TRUE 否則返回FALSE。其中
// rString 對CString將得到一個單獨的子字元串的對象。
// lpszFullString 待分割的字元串。
// iSubString 提取的子字元串的序號,從0開始。假如你想提取第3段,該參數就輸入2
// chSep 用於分割的字元,默認的是』\n』。
下面是一段運用實例
vector<CString> SplitCString(CString strSource, charch){ CString strTmp; vector<CString> vecString; intiPos=0; while(AfxExtractSubString(strTmp,strSource,iPos,ch)) { iPos++; vecString.push_back(strTmp); } returnvecString;}
特別注意:strtok在分割的時候將分割符改變成『/0』了,所以這個函數會修改源字元串,分割符不會包含在分割出來的字元串中,strtok允許多分割字元,比如空格+逗號表示為『 ,』,還有一點需要注意的是如果被分割的字元第一個是分割符,那麼該字元會被忽略掉。如果出現連續的分隔符,那麼也會忽略掉,比如字元串1|2||||3,用strtok來分割將得到1 2 3,但是如果用AfxExtractSubString,得到將會是1 2 空字元串 空字元串 空字元串 3,需求不同選擇不同的函數。
4、利用CString Find函數自己分割字元串
vector<CString> SplitCString(CString strSource, charch){ CString strTmp; vector<CString> vecString; intn=-1; n=strSource.Find(ch) while(n!=-1) { strTmp=strSource.Left(n)//這里根據需要判斷是否需要分隔符 vecString.push_back(strTmp); strSource=strsource.left(strSource.Getlenth-n+1) n=strSource.Find(ch); } returnvecString;}
這種方法功能和上述類似,使用也很靈活,可以根據自己需要分割字元串。
2. C++ mfc中,類CString如何分割開啊
使用抄AfxExtractSubString函數,例如:
CString strSource = "abc ,5,5,abc d,0";
CString str1;
CString str2;
CString str3;
CString str4;
CString str5;
AfxExtractSubString(str1,strSource,0,',');
AfxExtractSubString(str2,strSource,1,',');
AfxExtractSubString(str3,strSource,2,',');
AfxExtractSubString(str4,strSource,3,',');
3. 如何把CString字串按逗號分開,存到二維數組中
直接這么寫:
CString s[] ={_T("Corresponding Group"), _T(""), _T("Random1")};
東西就在 s[0],s[1],s2] 中。
4. CString分割問題,將一串字元串分成幾個字元串
voidCCConfigureDlg::OnGetAreaItem(){//TODO:,ItemCount=0;CStringAreaItem="AREA1,AREA2,AREA3,AREA4,AREA5,AREA6,AREA11,AREA12";while((Pos=AreaItem.Find(','))!=-1){AreaItem=AreaItem.Right(AreaItem.GetLength()-Pos-1);AfxMessageBox(AreaItem);ItemCount++;}SetDlgItemInt(IDC_EDIT1,ItemCount+1,TRUE);UpdateData(FALSE);}
5. cstring從右裁剪掉指定字元後的字元串保留指定字元前的cstring
CString str;
CString Tmp = 「abcddef」抄;
CString res;
res = str.left(4); // res 就等於襲 abcd
保留指定字元前的cstring也是一樣
先用int n = Tmp.find("d"); //n就等於3。(從0開始計數,d是第3個字元)
然後再res = str.left(n); //res 就取str左側3個字元,即abc。這時的3是指3個,不是索引
你用追問啊。補充提問我有時沒看到,從後面找可以使用ReverseFind(),用法和find()是一樣的,只不過這個是從後面開始查找
int n = Tmp.ReverseFind("d");
返回的n就是後的一個d的索引位置,然後str.left(n+1)就把你這個d後面的全部去掉了
6. 在vc++中,cstring如何按一定位數添加分割符
CString類沒有簡便的函數實現這個功能,只能自己寫一個:
CStringstr="",s1;
intlen=(str.GetLength()-1)/8;//-1:如果整除8,最後面不加版_
for(inti=len*8;i>0;i-=8)
{
權s1=str.Right(str.GetLength()-i);
str=str.Left(i)+'_';
str+=s1;
}
7. C++ 字元串分割
int CString::ReverseFind(TCHAR ch);
intpos=S1.ReverseFind('A')+1;
CStringS1_1=S1.Left(pos),S1_2=S1.Right(pos);
8. 如何在一個CString的字元串中,以","為分割點,提取子字元串
你再去改改吧基本思路就是一個一前一後兩個下標截取中間版部分voidCMfcdlg2015Dlg::OnButton2(){CStringrz_pic="0213200004_AllKsccno_20140608170707\\RzgjImage\\0213200004_下窪權學\\L0213011_L0213011\\20140607082837-1413d150527.jpg";CStringArrayarr;CStrings;inti;intj;intlen=rz_pic.GetLength();for(i=0;i<len;){for(j=i;j<len;j++){if(rz_pic[j]=='\\'){s=rz_pic.Mid(i,j-i);arr.Add(s);break;}}if(j<=len)i=j+1;}for(i=0,j=arr.GetSize();i<j;i++){MessageBox(arr[i]);}}
9. c++字元串分割CString
你再去改改吧 基本思路就是一個 一前一後兩個下標 截取中間專 部分
void CMfcdlg2015Dlg::OnButton2()
{
CString rz_pic = "0213200004_AllKsccno_20140608170707\\RzgjImage\\0213200004_下窪學\\L0213011_L0213011\\20140607082837-1413d150527.jpg";
CStringArray arr;
CString s;
int i;
int j;
int len = rz_pic.GetLength();
for(i=0;i<len;)
{
屬for(j=i;j<len;j++)
{
if(rz_pic[j]=='\\')
{
s = rz_pic.Mid(i, j-i);
arr.Add(s);
break;
}
}
if(j<=len)i = j + 1;
}
for(i=0,j=arr.GetSize();i<j;i++)
{
MessageBox(arr[i]);
}
}
10. CString 讀取數據分割
先用「;」分割為N小句。
然後再截取每句的等號前方的內容,存為變數