1,、首先必須了解,string可以被看成是以字符為元素的一種容器,。字符構(gòu)成序列(字符串),。有時候在字符序列中進行遍歷,標(biāo)準的string類提供了STL容器接口,。具有一些成員函數(shù)比如begin(),、end(),迭代器可以根據(jù)他們進行定位,。 注意,,與char*不同的是,,string不一定以NULL('\0')結(jié)束。string長度可以根據(jù)length()得到,,string可以根據(jù)下標(biāo)訪問,。所以,不能將string直接賦值給char*,。 2,、string 轉(zhuǎn)換成 char * 如果要將string直接轉(zhuǎn)換成const char *類型。string有2個函數(shù)可以運用,。 一個是.c_str(),,一個是data成員函數(shù)。 例子如下: string s1 = "abcdeg"; const char *k = s1.c_str(); const char *t = s1.data(); printf("%s%s",k,t); cout<<k<<t<<endl; 如上,,都可以輸出,。內(nèi)容是一樣的。但是只能轉(zhuǎn)換成const char*,,如果去掉const編譯不能通過,。 那么,如果要轉(zhuǎn)換成char*,,可以用string的一個成員函數(shù)copy實現(xiàn),。 string s1 = "abcdefg"; char *data; int len = s1.length(); data = (char *)malloc((len+1)*sizeof(char)); s1.copy(data,len,0); printf("%s",data); cout<<data; 3、char *轉(zhuǎn)換成string 可以直接賦值,。 string s; char *p = "adghrtyh"; s = p; 不過這個是會出現(xiàn)問題的,。 有一種情況我要說明一下。當(dāng)我們定義了一個string類型之后,,用printf("%s",s1);輸出是會出問題的,。這是因為“%s”要求后面的對象的首地址。但是string不是這樣的一個類型,。所以肯定出錯,。 用cout輸出是沒有問題的,若一定要printf輸出,。那么可以這樣: printf("%s",s1.c_str()) 4,、char[] 轉(zhuǎn)換成string 這個也可以直接賦值。但是也會出現(xiàn)上面的問題,。需要同樣的處理,。 5、string轉(zhuǎn)換成char[] 這個由于我們知道string的長度,,可以根據(jù)length()函數(shù)得到,,又可以根據(jù)下標(biāo)直接訪問,所以用一個循環(huán)就可以賦值了,。 這樣的轉(zhuǎn)換不可直接賦值,。 string pp = "dagah"; char p[8]; int i; for( i=0;i<pp.length();i++) p[i] = pp[i]; p[i] = '\0'; printf("%s\n",p); cout<<p; |
|
來自: yetao_study > 《C 》