C++裏的char和string

轉自:http://www.cnblogs.com/opsing/p/3435963.html#commentform

 

C++中的char是個基本類型,跟int一樣;而string卻是個庫自帶的類,string這個類包括很多成員函數,比如<a target=_blank class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=push_back&fr=qb_search_exp&ie=utf8" rel="nofollow" target="_blank">push_back</a>(), insert(), append()等,聲明的變量是個對象,但不需要程序員自動析構。
可參考:<a target=_blank href="http://www.cplusplus.com/reference/string/string/" target="_blank">http://www.cplusplus.com/reference/string/string/</a>
<strong>下面是C中字符串與C++字符串的區別。</strong>
1)
在C語言中,將字符串作爲字符數組來處理。即C string就是 char arrary[MAX_SIZE];字符數組。
而C++中的string 是 string class, 聲明形式 string strObject.變量是個對象。只是他是C++ 標準庫提供的<a target=_blank class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=string%E7%B1%BB&fr=qb_search_exp&ie=utf8" rel="nofollow" target="_blank">string類</a>,
其實現效果跟用戶自定義的類一樣。

2) 
C string 字符串可以用字符串數組 char Array[MAX_SIZE];與字符串變量 char *p; 兩種方式來存儲。
以 '\0'爲字符串結束標誌。
strlen 是把串結束符 '\0'算在內的,而sizeof是在對字符數組和字符變量的操作結果不一樣,引起原理不一樣。
strcmp, strncmp,連接使用strcat, 不能 str1+str2,
strchr(str1, ch); 在str1中查找ch第一次出現的位置,返回<a target=_blank class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E6%8C%87%E9%92%88%E5%8F%98%E9%87%8F&fr=qb_search_exp&ie=utf8" rel="nofollow" target="_blank">指針變量</a>
而C++ string是類,是對象.結束符是npos,或者-1;
不用指定字符數目的大小。
+ 取代了strcat
length和size取代了strlen
append, compare, substr,find, find_firt_of等函數
可以直接=, 而不用strncpy。
insert, replace, at, erase, clear, swap還有iterator函數的實現。

3)
在函數實現部分printf,scanf, fprinf等可以format的一個字符串中使用 "%s"時,只能用c string;如果是C++ string的話,就必須先變成
c string,否則就會報錯。如:
a)
string str ("Test string");  
printf("%s\n", str);  
編譯錯誤:warning: cannot pass objects of non-POD type 'struct std::string' through '...'; call will abort at runtime執行錯誤:Illegal instruction(coredump)
b)
void strprint(const char *s)  
{  
printf("function: %s\n%", s);  
}  
string str ("Test string");  
strprint(str);  
編譯錯誤:error: cannot convert 'std::string' to 'const char*' for argument '1' to 'void strprint(const char*)'因爲c string是基本類型:char 或char array;而c++ string卻是個類,是個對象。二者的實現截然不同,不同場合的使用需要轉換。修改:只需要將a), b)中的str變爲 str.<a target=_blank class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=c_str&fr=qb_search_exp&ie=utf8" rel="nofollow" target="_blank">c_str</a>()即可。另外,C++ string的<a target=_blank class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=c_str&fr=qb_search_exp&ie=utf8" rel="nofollow" target="_blank">c_str</a>()函數能給出c string 和C++ string的部分區別的解釋。

4)頭文件只有在使用c string的strncpy, strtok等<a target=_blank class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=%E5%BA%93%E5%87%BD%E6%95%B0&fr=qb_search_exp&ie=utf8" rel="nofollow" target="_blank">庫函數</a>時才include <<a target=_blank class="inner-link decor-none" href="http://zhidao.baidu.com/search?word=string.h&fr=qb_search_exp&ie=utf8" rel="nofollow" target="_blank">string.h</a>>而C++中,則在聲明 string 對象時include <string>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章