1. 程式人生 > >利用CString類對字串進行任意的操作,如字元的匹配或在字串中間開始進行新增字串

利用CString類對字串進行任意的操作,如字元的匹配或在字串中間開始進行新增字串

首先,我們要知道,我們利用CString類可以對字串進行一系列操作,如查詢,選擇等,主要有Left(),Mid(),Right(),Find(),ReverseFind(),FindOneOf()。

其中,Left(int nNumber)函式是擷取字串的左側的nNumber個字元,如果遇到漢字,則需要進一步判斷,例如算出每個漢字要有多少個字元。

CString strTest = _T("F:\\MyWork\\Test\\0-1.bmp");
CString strGet = strTest.Left(3);//strGet = F:\\
//注意這裡的\\表示的是一個字元,因為單獨的\是轉義字元,是不算在裡面的

這裡需要注意的是,擷取左側的你Number個字元,則nNumber個字元,應該是從1開始,則表示擷取左側的一個字元,2則表示兩個,0代表0個就是沒意義的意思。

Mid(int nFirst)表示從nFirst開始,知道字串結束,注意,這裡的是nFirst表示的是從第幾個開始,其形式和一維陣列類似,第一位表示法是0

CString strTest = _T("Serious_Tanx");
CString strGet = strTest.Mid(0);//strGet=Serious_Tanx

Mid(int nFirst, int nNumber則表示的是從第nFirst開始,擷取nNumber個字元,注意這裡的nFirst和nNumber不要弄混淆了,nFirst計算位數時從0開始,而nNumber則要從1開始,表示擷取幾位(這樣也可以理解,不能擷取0位,擷取0位則表示什麼也不擷取)。

CString strTest = _T("Serious_Tanx");
CString strGet1 = strTest.Mid(0,1);//strGet1=S
CString strGet2 = strTest.Mid(2,3);//strGet2=rio

這樣,有了上面的兩個概念,我們再理解Right()就不難理解了。
Right(int nNumber)是表示從字串的右面開始,擷取nNumber個字元。

CString strTest = _T("Serious_Tanx");
CString strGet = strTest.Right(1);//strGet=x

總結,對於Left(),Mid(),Right()來講,當擷取多長的字元時,是表示擷取1位到字串的長度。當表示從第幾位開始時,則表示法則和陣列的第幾位一樣的。即多長是從1開始,第幾則表示從0開始。

當我們理解了上面的這句話之後,對於Find(),FIndOneOf()和ReverseFind()就不難進行理解了。

Find()表示的從坐側第0位(即第一個字元開始),查詢第一個出現的字元的位置,返回的一個int值,表示第幾位(第幾位,按照我們上面所述,就明白是從第0位開始)。

CString strTest = _T("Serious_Tanx");
int nGet = strTest.Find('i');//nGet=3

FindOneOf()則表示給定的字串,然後從待查詢的字串中查找出給定的字串中第一個字串在待查詢的字串的位置。這麼說有點亂,即是從兩個字串中進行查詢。

CString strTest = _T("Serious_Tanx");
int nGet = strTest.FindOneOf("zzi");//nGet=3
//即zzi中的z在Serious_Tanx沒有體現,而進行下一個的查詢,到i的時候查詢到的位置是3

ReverseFind()是從待查詢的字串的右側開始查詢想要查詢的字元的位置。注意的是,是反向查詢第一個出現字元的位置,但是,這個位置是從左面第一個開始計算的。在好多的部落格中,例如天緣部落格中,這個例子舉的就是錯誤的。一定是從左面開始計算第幾個位置的。

CString strTest = _T("Serious_Tanx");
int nGet = strTest.ReverseFind('i');//nGet=3
int nGet = strTest.ReverseFind('S');//nGet=0
int nGet = strTest.ReverseFind('x');//nGet=11

好了,以上就是CString的各種操作,我們可以從這個操作中,進行一系列的深入操作處理,比如,匹配字串和查詢某個特定的字串然後進行新增操作。

在我們日常工作中,對字串進行最多的操作,一般就是上面的兩個,一個是對字串的匹配,另一個就是在字串的中間或者末尾進行新增操作,而在末尾中進行新增工作,這個不用我們多說,這個比較簡單。我們重點書前兩個。

比如說,我們通過CFileFind()查詢到一系列的圖片的路徑名,我們假設這裡有兩個路徑,名字分別為:F:\MyWork\Test\0-1.bmp,F:\MyWork\Test\0-2.bmp,F:\MyWork\Test\1-1.bmp,F:\MyWork\Test\1-2.bmp
現在,我們想在這四個字串中查詢到0-2這幅圖片,當然,我們可以通過一步查詢就能實現。然後,我們再在這0-2的圖片後面加上-get,表示我們得到了這幅圖片。即最後的圖片的路徑名變為F:\MyWork\Test\0-2-get.bmp

//這裡是簡略的寫,假設我們通過這步得到上面所述的四個路徑
CFileFind ff;
CString strPathName[4] = ff.GetFilePath();
CString strHeader,strFolder,strMatch,strSavePath;
CString strTemp = _T("0-2");

int pos1.po2;
for(int i=0; i<4; i++)
{
    pos1 = strPathName[i].ReverseFind('\\');//注意這裡要有\\,單一\表示轉義
    pos2 = strPathName[i].ReverseFind('.');
    //pos1=14,pos2=18    
    //0-2在裡面的表示應該是Mid(15,3),注意轉換。然後strMatch=0-2
    strMatch = strPathName[i].Mid(pos1+1, pos2-pos1-1);  
    if(strTemp == strMatch)
    {
        //strHeader=F:\\MyWork\\Test\\
        strHeader = strPathName[i].Left(pos1-1);
        //strFolder=.bmp
        strFolder = strPathName[i].Mid(pos2);
        //strSavePath=F:\\MyWork\\Test\\0-2-get.bmp
        strSavePath = strHeader + strMatch + _T("-get") + strFolder;
    }  
}

以上就是一個簡單的字串匹配和在字串的中間新增字串。

我們要明白的是,要想字串匹配,最好知道待匹配的字串的資訊,然後根據資訊來進行匹配,效果是最好的。