C++ 無內建字串型別,標準 C 庫提供字串處理函式。表 1.3 列出常用函式:
| 函式 | 說明 |
|---|---|
| strcat() | 將字串連接到目標字串末尾 |
| strcmp() | 比較兩字串是否相等 |
| strcmpi() | 比較兩字串是否相等(不分大小寫) |
| strcpy() | 將字串內容複製到目標字串 |
| strstr() | 掃描字串中第一次出現的子字串 |
| strlen() | 回傳字串長度 |
| strupr() | 將字串所有字元轉大寫 |
| sprintf() | 根據參數建立格式化字串 |
多數 C++ 編譯器提供 cstring 類別簡化處理;C++ Builder 有 AnsiString。但 C 風格字串處理仍常用並未過時。
char buff[30];
strcpy(buff, "This is a test.");
cout << buff << endl;
char buff2[] = "A second string.";
strcpy(buff, buff2);
cout << buff << endl;
char buff[10] = "A string"; // 9 字元 + \0
strcpy(buff, "This is a test."); // 需 16 字元 + \0 → 越界 6 位元組!
小錯誤抹除 6 位元組記憶體。**複製資料到字元陣列時必須特別小心**。
混合文字與數字建立格式化字串:
char buff[20];
int x = 10 * 20;
sprintf(buff, "The result is: %d", x);
cout << buff; // 顯示 "The result is: 200"
%d 告訴 sprintf 此處放整數,格式字串後的變數 x 提供值。
sprintf 可接受多個參數:
int x = 20, y = 5;
sprintf(buff, "%d + %d = %d", x, y, x + y);
cout << buff; // 顯示 "20 + 5 = 25"
C++ 字串中 \ 表特殊字元:\n 換行、\t 定位。要放實際反斜線須用 \\:
strcpy(fileName, "c:\\windows\\system\\win.ini");
許多程式設計師因忘記此事徹夜難眠。**常見錯誤,切記!**
功能相似,差別:**格式字串不可放浮點數**。C++ Builder 兩者皆可用,但 sprintf 完整支援浮點數且少打一字元。
字串陣列 = 字元陣列的陣列。Argstest 程式已用過:
char strings[][20] = {
"This is string 1",
"This is string 2",
"This is string 3",
"This is string 4"
};
四個字串,每個最多 19 字元。常用字串陣列建議看 STL,提供更方便的儲存與操作,含 string 類別。