C++編程語言中的字符操作時一個比較基礎而且重要的應用技術。我們在這篇文章中將會為大家詳細講解一下有關C++字符串類型的基本概念,相信通過本文的解讀,大家應該可以充分掌握這方面的知識。
要使用C++字符串類型中的string 類型必須先包含相關的頭文件
- #include <string>
例如下面是上一小節定義的字符數組
- #include <string>
- string st( "The expense of spirit\n" );
st 的長度由size()操作返回不包含終止空字符
- cout << "The size of "<< st<< " is " << st.size()<<
" characters, including the newline\n";
string 構造函數的第二種形式定義了一個空字符串,例如
- string st2; // 空字符串
我們怎樣能保證它是空的當然一種辦法是測試size()是否為0
- if ( ! st.size() )
- // ok: 空
更直接的辦法是使用empty()操作
- if ( st.empty() )
- // ok: 空
如果C++字符串類型中不含有字符則empty()返回布爾常量true ,否則返回false。第三種形式的構造函數用一個string 對象來初始化另一個string 對象,例如
- string st3( st );
將st3 初始化成st 的一個拷貝,怎樣驗證呢?等於操作符比較兩個string 對象,如果相等則返回true
- if ( st == st3 )
- // 初始化成功
怎樣拷貝一個字符串呢?最簡單的辦法是使用賦值操作符,例如
- st2 = st3; // 把st3 拷貝到st2 中
首先將與st2 相關聯的字符存儲區釋放掉,然後再分配足夠存儲與st3 相關聯的字符的存儲區。最後將與st3 相關聯的字符拷貝到該存儲區中。我們可以使用加操作符+ 或看起來有點怪異的復合賦值操作符+= 。將兩個或多個字符串連接起來。例如:給出兩個字符串
- string s1( "hello, " );
- string s2( "world\n" );
我們可以按如下方式將兩個字符串連接起來,形成第三個字符串
- string s3 = s1 + s2;
如果希望直接將s2 附加在s1 後面那麼可使用+= 操作符
- s1 += s2;
s1 和s2 的初始化包含了一個空格一個逗號以及一個換行,這多少有些不方便,它們的存在限制了對這些string 對象的重用,盡管它滿足了眼前的需要。一種替代做法就是混合
使用C 風格的字符串與string 對象。如下所示:
- const char *pc = ", ";
- string s1( "hello" );
- string s2( "world" );
- string s3 = s1 + pc + s2 + "\n";
這種連接策略比較受歡迎,因為它使s1 和s2 處於一種更容易被重用的形式。這種方法能夠生效是由於string 類型能夠自動將C 風格的字符串轉換成string 對象。例如:這使我們
可以將一個C 風格的字符串賦給一個string 對象。
- string s1;
- const char *pc = "a character array";
- s1 = pc; // ok
但是反向的轉換不能自動執行,對隱式地將string 對象轉換成C 風格的字符串。string類型沒有提供支持,例如,
下面試圖用s1 初始化str。 就會在編譯時刻失敗
- char *str = s1; // 編譯時刻類型錯誤
為實現這種轉換必須顯式地調用名為c_str()的操作
- char *str = s1.c_str(); // 幾乎是正確的但是還差一點
名字c_str()代表了C++字符串類型中的string 類型與C 風格字符串兩種表示法之間的關系。字面意思是給我一個C 風格的字符串,表示——即指向字符數組起始處的字符指針。但是這個初始化還是失敗了,這次是由於另外一個不同的原因,為了防止字符數組被程序直接處理,c_str()返回了一個指向常量數組的指針下一節將解釋常量修飾符const)
const char*
str 被定義為非常量指針所以這個賦值被標記為類型違例,正確的初始化如下
- const char *str = s1.c_str(); // ok
string 類型支持通過下標操作符訪問單個字符,例如在下面的代碼段中,字符串中的所有句號被下劃線代替
- string str( "fa.disney.com" );
- int size = str.size();
- for ( int ix = 0; ix < size; ++ix )
- if ( str[ ix ] == '.' )
- str[ ix ] = '_';
以上就是對C++字符串類型的相關介紹。