C++ 字符串处理知识体系
January 7, 2025About 2 min
C++ 字符串处理知识体系
1. 字符串基础
// 字符串声明和初始化
string str1 = "hello";
string str2("world");
string str3(5, 'a'); // "aaaaa"
// 常用操作
str1.length(); // 或 str1.size()
str1.empty(); // 判断是否为空
str1 += str2; // 字符串拼接
str1.append("text"); // 追加
str1.substr(0, 3); // 子串提取
str1.find("pattern"); // 查找2. 字符串转换
// 数字转字符串
string s1 = to_string(42); // 整数转字符串
string s2 = to_string(3.14); // 浮点数转字符串
// 字符串转数字
int n = stoi("42"); // string to int
double d = stod("3.14"); // string to double
long l = stol("42"); // string to long
// 字符大小写转换
char c = 'A';
char lower = tolower(c);
char upper = toupper(c);3. 字符串流 (StringStream)
#include <sstream>
// 字符串分割
string str = "Hello World 2024";
stringstream ss(str);
string word;
while (ss >> word) {
cout << word << endl;
}
// 格式化输出
stringstream ss2;
ss2 << setw(2) << setfill('0') << 5; // "05"
string result = ss2.str();
// 数据类型转换
stringstream ss3;
ss3 << 42;
string str_num = ss3.str();4. 字符串修改
string str = "Hello";
// 插入
str.insert(1, "NEW"); // "HNEWello"
// 删除
str.erase(1, 3); // 从位置1开始删除3个字符
// 替换
str.replace(0, 5, "Hi"); // 替换前5个字符为"Hi"
// 清空
str.clear();5. 字符串查找和比较
string str = "Hello World";
// 查找
size_t pos = str.find("World"); // 返回首次出现位置
pos = str.rfind("l"); // 从右向左查找
pos = str.find_first_of("aeiou"); // 查找第一个元音
pos = str.find_last_of("aeiou"); // 查找最后一个元音
// 比较
str.compare("Hello"); // 返回 0 表示相等6. 实用技巧
// 1. 字符串分割函数
vector<string> split(string s, char delimiter) {
vector<string> tokens;
stringstream ss(s);
string token;
while (getline(ss, token, delimiter)) {
tokens.push_back(token);
}
return tokens;
}
// 2. 去除首尾空格
string trim(string s) {
s.erase(0, s.find_first_not_of(" \t\n\r\f\v"));
s.erase(s.find_last_not_of(" \t\n\r\f\v") + 1);
return s;
}
// 3. 判断字符类型
bool isNumber(char c) { return isdigit(c); }
bool isLetter(char c) { return isalpha(c); }
bool isSpace(char c) { return isspace(c); }7. 常见应用场景
// 1. 日期格式化
string formatDate(const string& date) {
stringstream ss(date);
string day, month, year;
ss >> day >> month >> year;
return year + "-" + month + "-" + day;
}
// 2. URL 解析
string getUrlParameter(string url, string param) {
size_t pos = url.find(param + "=");
if (pos == string::npos) return "";
pos += param.length() + 1;
size_t end = url.find("&", pos);
return url.substr(pos, end - pos);
}
// 3. CSV 解析
vector<vector<string>> parseCSV(string& content) {
vector<vector<string>> result;
stringstream ss(content);
string line;
while (getline(ss, line)) {
result.push_back(split(line, ','));
}
return result;
}