C++ 標準庫 <string> 提供了功能豐富的 std::string 類,徹底解決 C 風格字符串操作繁瑣、不安全的問題。本文涵蓋構造、輸入輸出、常用操作、大小比較及典型陷阱。
#include <string>
using std::string; // 或 using namespace std;
string str; // 默認構造,空字符串
| 語法 | 說明 |
|---|---|
string s; | 默認構造,空串 |
string s = "abc"; | 拷貝初始化 |
string s("abc"); | 直接初始化 |
string s2(s1); | 用 string 對象初始化 |
string s(5, 'c'); | 5 個 'c',即 "ccccc" |
cin >> str:跳過前導空白,讀至下一空白 (不含換行)。getline(cin, str):讀取整行 (含空格),丟棄末尾換行符。注意:若前序有 cin >> 殘留換行符,需先 cin.ignore()。cout << str << endl:輸出字符串。str.size() // 長度 (不含 '\0')
str.empty() // 是否為空
str[n] // 下標訪問 (可作左值修改)
str1 + str2 // 拼接 (至少一邊為 string)
str1 == str2 // 字典序比較 (區分大小寫,'A' < 'a')
str1 < str2 // 同前
sizeof(str) 返回 string 對象大小 (通常 32/64 位系統為 32/40 字節),非 字符串長度。請用 str.size()。str[0] 對空串未定義行為,雖然部分實現返回 '\0',但標準不保證。"abc" + "def" 錯誤:字面值指針不可相加,需 string("abc") + "def"。getline 循環 + s += line + '\n'。cin >> word 循環 + s += word + ' '。size() 與關係運算符。#include <iostream>
#include <string>
using namespace std;
int main() {
string s1, s2("hello");
s1 = "world";
cout << s1 + " " + s2 << endl; // world hello
cout << "size: " << s1.size() << ", sizeof: " << sizeof(s1) << endl;
s1[0] = 'W';
cout << s1 << endl; // World
return 0;
}