引言
最近在學習C++,下面將從基礎到進階的順序,列出一些 C++ 中常見的字符串定義方式及其用法,包含完整代碼和詳細注釋,加深對代碼的理解。
C 風格字符串(char*或 char[])
- 定義方式
#include <iostream>int main() {// 字符串字面量(不可修改)const char* str1 = "Hello";// 字符數組(可修改)char str2[] = "World";// 手動初始化字符數組(需留空間給 '\0')char str3[6] = {'H', 'e', 'l', 'l', 'o', '\0'};std::cout << str1 << " " << str2 << " " << str3 << std::endl;return 0;
}// 輸出結果:Hello World Hello
-
特點
結尾必須是 ‘\0’
不安全,容易越界或引發未定義行為
推薦盡量用 std::string 替代
C++ 標準字符串(std::string)
- 常見定義方式與用法
#include <iostream>
#include <string>int main() {// 定義字符串std::string s1 = "Hello";std::string s2("World");std::string s3 = s1 + ", " + s2 + "!"; // 字符串拼接std::cout << s3 << std::endl; // 輸出:Hello, World!// 字符訪問std::cout << "第一個字符:" << s3[0] << std::endl;std::cout << "最后一個字符:" << s3.back() << std::endl;// 長度與清空std::cout << "長度:" << s3.length() << std::endl;s3.clear();std::cout << "是否為空:" << s3.empty() << std::endl;return 0;
}/*
輸出結果:
Hello, World!
第一個字符:H
最后一個字符:!
長度:13
是否為空:1
*/
字符串數組或向量
- 使用 std::vectorstd::string
#include <iostream>
#include <vector>
#include <string>int main() {std::vector<std::string> fruits = {"apple", "banana", "cherry"};// 添加元素fruits.push_back("date");// 遍歷for (const std::string& fruit : fruits) {std::cout << fruit << std::endl;}return 0;
}/*
輸出結果:
apple
banana
cherry
date
*/
- 使用 std::array<std::string, N>(定長數組)
#include <iostream>
#include <array>
#include <string>int main() {std::array<std::string, 3> days = {"Monday", "Tuesday", "Wednesday"};for (const auto& day : days) {std::cout << day << std::endl;} // 使用 auto 自動識別數據類型return 0;
}/*
輸出結果:
Monday
Tuesday
Wednesday
*/
字符串處理常用操作
- 查找和替換
#include <iostream>
#include <string>int main() {std::string text = "I like apples and apples are sweet.";// 查找第一個"apple"size_t pos = text.find("apples");if (pos != std::string::npos) {std::cout << "找到位置:" << pos << std::endl;}// 替換第一個"apples"為"oranges"text.replace(pos, 6, "oranges");std::cout << "替換后:" << text << std::endl;return 0;
}
- 子串、大小寫、比較
#include <iostream>
#include <string>int main() {std::string s = "HelloWorld";// 提取子串std::string sub = s.substr(0, 5); // "Hello"// 比較if (s == "HelloWorld") {std::cout << "字符串相等" << std::endl;}// 大小寫轉換(手動方式)for (char& c : s) {c = tolower(c); // 或者 toupper(c)}std::cout << s << std::endl;return 0;
}
其他容器中的字符串用法
- std::dequestd::string
#include <iostream>
#include <deque>
#include <string>int main() {std::deque<std::string> queue;queue.push_back("first");queue.push_back("second");queue.push_front("zero");for (const auto& item : queue) {std::cout << item << std::endl;}return 0;
}
- std::map<std::string, std::string>
#include <iostream>
#include <map>
#include <string>int main() {std::map<std::string, std::string> dict;dict["apple"] = "蘋果";dict["banana"] = "香蕉";for (const auto& [eng, chi] : dict) {std::cout << eng << ": " << chi << std::endl;}return 0;
}
字符串與數值轉換
#include <iostream>
#include <string>int main() {std::string numStr = "123";int num = std::stoi(numStr); // string -> intdouble d = std::stod("3.1415"); // string -> doublestd::string s = std::to_string(42); // int -> stringstd::cout << "整數:" << num << ",浮點數:" << d << ",字符串:" << s << std::endl;return 0;
}