C++ 提供兩種字串表示:C 風格字串(以 null 結尾的 char 陣列)與 std::string 類別(標準程式庫提供,功能豐富、記憶體自動管理)。現代 C++ 強烈建議優先使用 std::string。
本質是 char[],以 '\0' 結尾。宣告初始化:
char greeting[6] = {'H','e','l','l','o','\0'};
char greeting[] = "Hello"; // 編譯器自動加 '\0'

<cstring>)| 函式 | 用途 |
|---|---|
strcpy(dest, src) | 複製字串 |
strcat(dest, src) | 連接字串(附加到 dest 末尾) |
strlen(str) | 回傳字串長度(不含 '\0') |
strcmp(s1, s2) | 比較字串,相等回 0 |
strchr(s, c) | 尋找字元首次出現位置 |
strstr(s1, s2) | 尋找子字串首次出現位置 |
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char str1[10] = "Hello";
char str2[10] = "World";
char str3[10];
int len;
strcpy(str3, str1);
cout << "strcpy: " << str3 << endl;
strcat(str1, str2);
cout << "strcat: " << str1 << endl;
len = strlen(str1);
cout << "strlen: " << len << endl;
return 0;
}
輸出:
strcpy: Hello strcat: HelloWorld strlen: 10
<string>)封裝動態記憶體管理,支援直觀運算子與豐富成員函式。
+ 連接、== 比較、[]/at() 存取size()/length()、substr()、find()、replace() 等高階操作c_str() 取得 const char*#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "Hello";
string str2 = "World";
string str3;
int len;
str3 = str1; // 複製
cout << "str3: " << str3 << endl;
str3 = str1 + str2; // 連接
cout << "str1+str2: " << str3 << endl;
len = str3.size(); // 長度
cout << "size: " << len << endl;
return 0;
}
輸出:
str3: Hello str1+str2: HelloWorld size: 10
| 場景 | 建議 |
|---|---|
| 一般應用開發 | 優先 std::string,安全、易用、效能足夠 |
| 高效能/嵌入式/與 C 介接 | 考慮 char[] 或 std::string_view (C++17) 避免配置 |
| 固定長度、極度敏感 | std::array<char, N> 或 C 風格 |
s.size() / s.length():長度s.empty():是否為空s.clear():清空內容s.substr(pos, len):子字串s.find(str) / s.rfind(str):查找s.replace(pos, len, str):替換s.insert(pos, str) / s.erase(pos, len):插入/刪除s.c_str():取得 C 風格指標std::to_string(num):數值轉字串 (C++11)理解 C 風格字串有助於閱讀舊代碼與介接 C API,但現代 C++ 專案應以 std::string 為主力,配合 string_view (C++17) 實現零複製檢視,兼顧安全與效能。