接著我們要說說 C String!C string 是字元陣列,通常會使用 pointer 來做應用。還有另一種字串:C++ string,則是一種物件(object),不過由於這門課還是一門基礎課,這邊就先不介紹 C++ string。
當我們要宣告字串的時候,就須要宣告他的變數類型為char
的陣列,而其值我們在VS code中必須以雙引號“
”
框起來。而引號內的值會以 ASCII code 記。
例如:
char c = ‘0’;
這時候如果我們輸出其結果,會輸出 0 的 ASCII code,也就是’48’。
反之,
char c = 48;
輸出則會得到數字0
。
我們可以拿字元陣列與一般的陣列來做比較:
int values[5] = {0};
cout << values;
結果並不意外,會出現一組 address,也就是values
的 address。
char str[10] = “abcde”;
cin >> str;
cout << str;
Char str[10] 意思是這個str
字串輸出結果為 abcde
。
另外,要特別注意的是,我們可以寫
int b;
b = 0;
但是我們不能以同樣的邏輯初始化字元陣列,像是
char s[100];
s = “this is a string”;
Null character 我們記為\0
,電腦會自己存,代表一個字串的結束。
也就是說,以以下例子來看:
不過並不是每一種情形 null character 都會被加入,
初始化的時候:
char s[10] = "abc"; // null character
char s[100] = {'a', 'b', 'c'}; // no \0
input 也有兩種情況:
cin >> s; // null character
cin >> s[0]; // no \0
再來,我們可能會遇到一個問題:
char a1[100] = {0};
cin >> a1; // “this is a string”
cout << a1; // “this”
明明我們就是輸入一個句子ㄟ!為什麼輸出卻只能輸出一個詞!
原來cin
會根據空白鍵來切割輸入的字串,這時候我們的解決辦法就是使用cin.getline()
。cin.getline( )
的用法就是括號中前面放字串名稱,後面放字串長度,中間以逗號隔開。
char a[100];
cin.getline(a, 100);
cout << a;
如此一來,就能輸出任何我們想要的東西!
最後最後,來介紹一些跟字串有關的函數:
strlen
用來計算字串長度。
toupper
把所有字元都換成大寫。
tolower
把所有字元都換成小寫。
strstrstrstr(first, second)
就是找second
有沒有在first
中出現,在找關鍵字時很實用。
那 C string 的部分就告一段落啦!