1. 程式人生 > 實用技巧 >[知識點] 1.3.3 字元陣列與 string

[知識點] 1.3.3 字元陣列與 string

總目錄> 1 語言基礎 > 1.3.3字元陣列與 string

前言

作為 C++ 的特性,OI 的幾年裡基本沒有用過 string(字串),因為覺得 char 陣列(字元陣列)實在很方便。。這裡單獨開一篇以進一步瞭解下字元陣列與字串的各種聯絡、差異與優劣。

子目錄列表

1、字元陣列

2、string 類

1.3.3字元陣列與 string

1、字元陣列

① 概念

1.2 C++ 基礎知識中已經先後介紹了各種資料型別以及陣列。那麼在其中,比較特殊的一類陣列就是 char 型別的陣列。對於其他資料型別的陣列,儘管它們被歸類於一組,但其實元素之間依舊只存在一個邏輯地址上的關係,只是一串相鄰的值;而 char 型別因為儲存的是字元,如果將各個字元相連,正如將各個字母相連一樣能夠組成單詞,就組成了一串字元,簡稱字串

我們用單引號來表示字元,而雙引號表示字串,如下兩種對字元陣列的定義均是合法的:

char a[10] = {'h', 'e', 'l', 'l', 'o'};
char b[10] = "hello";

(但它們並不等價,字串整體賦值時會自動在字串末尾加上 '\0' 字元,該字元為結束符,表示一個字串的結束;也就是說,b 的實際內容為 "hello/0",而 a 為 "hello")

在 C 語言中,只能通過 char 陣列來實現字串。這樣的字串,稱之為 C 風格字串

② 相關函式

> strlen(s) 返回字串 s 的長度

> strcpy(s1, s2) 將字串 s2 賦值給 s1

> strcat(s1, s2) 將字串 s2 連線到 s1 末尾

> strcmp(s1, s2) 判斷字串 s1 和 s2 的字典序

關於字串的字典序,請參見:<施工中>

還有 strchr, strstr... 其實除了第一條查詢字串長度函式外,其他函式都能比較輕鬆的手動實現,使用的也不多,瞭解即可。

2、string 類

stringC++ 標準庫 <string> 中提供的一個,本質上是 std :: basic_string<char> 的簡稱,其作用就是實現字串的功能。不同於 int, double, char 等,它們屬於標準資料型別,C / C++ 通用,而 string 只是 C++ 標準庫中的一個類,和其他 C++ 中的 STL 容器屬於一種型別。

因為字元陣列的特殊性,C++ 直接原生提供字串 string,某種程度上解決了很多不便。相比 char 陣列,string 的優勢在於:

① 動態分配空間

② 可以過載運算子

③ 可以整體賦值

string 的實際操作更為便捷,由於可以直接賦值,所以不需要複製函式;連線字串可以直接相加,比如 s = s1 + s2;求字串 s 長度可以使用 s.size()