C 式字串 (C-Style String)
C 式字串即是字元陣列,相較一般陣列,字元陣列有一些獨有的用法,以下來介紹:
注意
這裡是指 C 式字串(字元陣列),不是 C++ 的 STL 容器 String
宣告
C 式字串是陣列,所有陣列宣告方法也適用在 C 式字串,唯要注意最後要給一個 \0
,表示字串結尾。C 式字串可以不給大小(長度),此外,也可以用字串常數宣告,使用字串常數宣告,不用在後面加上 \0
,但程式自動會補 \0
。
1 2 3 4 |
|
輸入輸出
C 式字串可以一個字元一個字元慢慢輸入,也可以一次輸入整個字串。:
scanf
會輸入直到遇見換行字元,輸入的長度有可能大於變數長度,可能造成安全上的疑慮(程式競賽中給的資料都是有長度限制,沒有這個問題), scanf
可以設定 width
來控制輸入長度。
輸出用 printf
, printf
會一直輸出,直到遇見 \0
。
1 2 3 |
|
字典序
字典序是指按照單詞出現在字典的順序進行排序的方法1,可用來規範字串之間的順序。兩個相異字串間的字典序比較:
- 從第 個字元開始比對。
- 如果字元相同,比較下一個字元。
- 否則轉換成 ASCII 編號,比較編號大小,編號小的字典序較小。
- 如果遇到其中一方字串已經比較完所有字元,則字串長度較短者,其字典序較小。
- 在第 個字元 ,因此
- 在第 個字元 ,因此
- 前第 個字元都相等,因為 已經比較完所有字元,因此
Scan Set
Scan Set 可以設定字串輸入只包含哪些字元,主要用於輸入格式較複雜的題目。舉例如下:
%[abc]s
:輸入包含abc
的字串%[^abc]s
:輸入不包含abc
的字串
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|