CString常用操作種種

2021-04-18 05:37:34 字數 3667 閱讀 5575

cstring給mfc程式設計師帶來了在那個年代不敢奢望的功能,甚至在vs2005剛發布的時候,為了應對預設unicode的問題,我常常使用cstring避免顯式的寬字元轉換。

在現在,好用的cstring也是atl的一部分了。其實atl裡的cstring和mfc裡的是同乙個東東,如果在mfc中已經很熟悉cstring了,就沒有必要更多的研究了。

下面是我自己覺得常用的幾個操作,當然有些我以前沒用過的覺得相見恨晚的東東,我也寫進去了。

//a.建構函式,cstringt提供了19個建構函式,其中乙個旨在.net平台託管c++工程中才被編譯,我只寫幾個我覺得常用的

//1.預設建構函式,生成乙個""字串

cstring cstr1;

//2.拷貝建構函式

cstring cstr2(cstr1);

//3.從lpcstr構造

lpcstr mycstr = "hello cstring";

cstring cstr3(mycstr);

//4.從lpcwstr構造

lpcwstr mycwstr = l"hello cstring";

cstring cstr4(mycwstr);

//5.指定n個c字元構造

char mycharacter = 'x';

cstring cstr5(mycharacter,10); //構造10個x的字串

//6.從指定n個w字元構造

wchar_t mywcharacter = '測';

cstring cstr6(mywcharacter,5);

//7.從unsigned char(也就是mbcs)構造

unsigned char* pmbcs = null;

cstring cstr7(pmbcs);

//8.從variant構造

bstr bstr = sysallocstring(l"hello world");

variant var;

var.bstrval = bstr; //var.bstrval = l"hello world"cstr8的字元資訊不對。

var.vt = vt_bstr;

sysfreestring(bstr);

cstring cstr8(var);

//b.cstring提供了8個賦值操作符,我只寫我覺得幾個常用的

//1.cstring到cstring

cstr8 = cstr7;

//2.c char到cstring

cstr8 = mycharacter;

//3.w char到cstring

cstr8 = mywcharacter;

//4.uc char到cstring

cstr8 = pmbcs;

//5.variant到cstring

cstr8 = var;

//c.字串連線,我只寫幾個我覺得常用的

//1.operator+ char

cstr8 += mycharacter;

//2.operator+ unsigned char

cstr8 += unsigned char('c');

//3.operator+ wchar_t

cstr8 += mywcharacter;

//4.operator+ variant

cstr8 += var;

//cstring + cstring

cstr8 += cstr7;

//d.大小寫轉換

cstr8.makeupper(); //轉大寫

cstr8.makelower(); //轉小寫

//e.cstring定義了比較完整的比較操作,這有==、!=、《等等

//f.操作

//1.查詢

cstr8.find('o'); //查詢第乙個'o'

cstr8.find('o',5); //從左起第5個查

cstr8.findoneof(l"aeiou"); //查詢集合中的任乙個

cstr8.reversefind('o'); //反向查詢

//2.裁剪

cstr8.trim(); //裁剪開始+末尾空格

cstr8.trim('o'); //裁剪左右'o'

cstr8.trim(l"aeiou"); //裁剪左右任何在集合中的字元

cstr8.trimleft();

cstr8.trimleft('o');

cstr8.trimleft(l"aeiou");

cstr8.trimright();

cstr8.trimright('o');

cstr8.trimright(l"aeiou");

//3.取回目標字串中被指定字串包含的子串

cstr8 = l"hello worldhello world";

cstr7 = cstr8.spanincluding(l"mhellohaha");

//4.取回原串,直到目標串中的任意乙個字元出現

cstr7 = cstr8.spanexcluding(l"aiuw");

//5.inert

cstr8.insert(5,l"haha"); //指定位置插入字串

cstr8.insert(6,'h'); //指定位置插入字元

//6.delete、remove

cstr8.delete(5,2); //從指定位置(5)刪除若干個(2)字元

cstr8.remove('o'); //移除所有'o'

//7.replace

cstr8.replace('o','a'); //把'o'替換為'a'

cstr8.replace(l"haha",l"toto"); //字串替換

//9.提取子串

cstring cstrret;

cstrret = cstr8.left(5); //提取最左n個字元

cstrret = cstr8.mid(10); //從第n個字元到結尾

cstrret = cstr8.mid(10,15); //提取指定區間字串

cstrret = cstr8.right(11); //最右邊n個字元

//10.反轉

cstr8.makereverse();

//11.以特定分隔符提取

int refn = 0;

cstrret = cstr8.tokenize(l"aeiou",refn); //可以使用refn遞迴找到所有被分割的子串

//12.載入dll或exe中的字串資源

cstr8.loadstring(100); //100為資源id,還有其他過載,略去

//13.獲取環境變數

cstr8.getenvironmentvariable(l"windir");

//14.格式化

cstr8.format(l"haha,now is%d with %s",100,l"old"); //format string 也可以是資源id

//g.與bstr的互動

bstr bstr1 = cstr8.allocsysstring();

bstr bstr2 = cstr8.setsysstring(&bstr1);

sysfreestring(bstr2);

C string常用操作

1.獲取字串長度 string str 1234567 int len str.length len 72.字串比較原理 兩個字串自左向右逐個字元相比 按ascii值大小相比較 直到出現不同的字元或遇 0 為止,如 15 123 若是遇到 0 結束比較,則長的子串大於短的子串,如 9856 985 ...

C string常用操作

string是乙個類,char是乙個指標 string 封裝了char,管理該字串,是個char 的容器 string封裝了很多實用的方法 如 查詢,拷貝,刪除,替換,插入等 string不需要考慮記憶體釋放和越界問題 string轉char string str deffre 注意 這裡要加上 c...

C string的常用操作

int main 雖然at和operator都可以獲取指定下標的字元,但at有越界檢查,發現越界時 pos size 會丟擲異常std out of range operator沒有越界檢查,當越界時行為未定義。int main int main 引數 說明str 字串str str,pos,len...