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