-
个人简介
C++ 常用函数指南
一、C风格字符串函数(需包含 )
1. 基础操作
函数 原型 功能 示例 strlen size_t strlen(const char* s) 获取字符串长度(不含'\0') strlen("Hello") → 5 strcpy char* strcpy(char* dest, const char* src) 复制字符串 strcpy(dest, src) strncpy char* strncpy(char* dest, const char* src, size_t n) 复制最多n个字符 strncpy(dest, src, 5) strcat char* strcat(char* dest, const char* src) 拼接字符串 strcat(dest, src) strncat char* strncat(char* dest, const char* src, size_t n) 拼接最多n个字符 strncat(dest, src, 3) 2. 比较操作
函数 原型 功能 示例 strcmp int strcmp(const char* s1, const char* s2) 比较两个字符串(字典序) strcmp("abc", "abd") → -1 strncmp int strncmp(const char* s1, const char* s2, size_t n) 比较前n个字符 strncmp("abc", "abd", 2) → 0 strcmp返回值说明:
< 0:s1 小于 s2(字典序靠前)
== 0:s1 等于 s2
0:s1 大于 s2(字典序靠后)
3. 查找操作
函数 原型 功能 示例 strchr char* strchr(const char* s, int c) 查找字符首次出现位置 strchr("Hello", 'l') → 指向第一个'l' strrchr char* strrchr(const char* s, int c) 查找字符最后一次出现位置 strrchr("Hello", 'l') → 指向第二个'l' strstr char* strstr(const char* haystack, const char* needle) 查找子串首次出现位置 strstr("Hello World", "World") 二、C++ string类函数(需包含 )
1. 基本属性操作
函数 用法 功能 示例 length() / size() s.length() 返回字符串长度 s.length() → 5 empty() s.empty() 判断是否为空 s.empty() → false clear() s.clear() 清空字符串 s.clear() 2. 字符访问
函数 用法 功能 示例 operator[] s[i] 访问第i个字符(不检查边界) s[0] → 'H' at() s.at(i) 访问第i个字符(检查边界) s.at(0) → 'H' front() s.front() 访问第一个字符 s.front() → 'H' back() s.back() 访问最后一个字符 s.back() → 'o' 3. 字符串修改
函数 用法 功能 示例 operator+= s += " World" 追加字符串 s += "!" append() s.append(" World") s.append(" World") push_back() s.push_back('!') 追加一个字符 s.push_back('!') insert() s.insert(5, " ") 在位置5插入字符串 s.insert(0, "Hi ") erase() s.erase(5, 3) 从位置5删除3个字符 s.erase(2, 3) replace() s.replace(0, 3, "Hey") 替换从0开始的3个字符 s.replace(0, 2, "A") swap() s.swap(t) 交换两个字符串 s.swap(t) 4. 查找操作
函数 用法 功能 示例 find() s.find("World") 查找子串,返回位置 s.find("World") → 6 rfind() s.rfind('l') 从右向左查找 s.rfind('l') → 3 find_first_of() s.find_first_of("aeiou") 查找第一个元音字母 返回位置 find_last_of() s.find_last_of("aeiou") 查找最后一个元音字母 find_first_not_of() s.find_first_not_of("abc") 查找第一个不在"abc"中的字符 find返回值说明:
- 找到:返回第一次出现的位置(size_t类型)
- 未找到:返回 string::npos
5. 子串和类型转换
函数 用法 功能 示例 substr() s.substr(3, 5) 提取子串(从3开始,取5个) s.substr(0, 3) → "Hel" c_str() s.c_str() 转为C风格字符串(只读) printf("%s", s.c_str()) data() s.data() 返回字符数组指针 同c_str() copy() s.copy(arr, 5, 0) 复制到char数组 复制5个字符到arr 6. 大小写转换(需包含 )
函数 用法 功能 示例 toupper transform(s.begin(), s.end(), s.begin(), ::toupper) 转大写 "hello" → "HELLO" tolower transform(s.begin(), s.end(), s.begin(), ::tolower) 转小写 "HELLO" → "hello" 7. 比较操作
函数 用法 功能 示例 operator== s1 == s2 判断相等 "abc" == "abc" → true operator< s1 < s2 字典序比较 "abc" < "abd" → true compare() s1.compare(s2) 返回比较结果 s1.compare(s2) → 0/正数/负数 三、综合示例代码
#include <bits/stdc++.h> using namespace std; int main() { // ====== C风格字符串示例 ====== char str1[20] = "Hello"; char str2[20]; // 1. 复制 strcpy(str2, str1); cout << "str2: " << str2 << endl; // Hello // 2. 长度 cout << "长度: " << strlen(str1) << endl; // 5 // 3. 拼接 strcat(str1, " World"); cout << "str1: " << str1 << endl; // Hello World // 4. 比较 if (strcmp(str1, "Hello World") == 0) { cout << "相等" << endl; } // 5. 查找子串 char* pos = strstr(str1, "World"); if (pos != NULL) { cout << "找到: " << pos << endl; // World } // ====== C++ string示例 ====== string s1 = "Hello"; string s2 = "World"; // 1. 拼接 string s3 = s1 + " " + s2; cout << "s3: " << s3 << endl; // Hello World // 2. 长度 cout << "长度: " << s3.length() << endl; // 11 // 3. 访问 cout << "第1个字符: " << s3[0] << endl; // H cout << "最后1个字符: " << s3.back() << endl; // d // 4. 查找 size_t pos2 = s3.find("World"); if (pos2 != string::npos) { cout << "World在位置: " << pos2 << endl; // 6 } // 5. 提取子串 string sub = s3.substr(0, 5); cout << "子串: " << sub << endl; // Hello // 6. 替换 s3.replace(0, 5, "Hi"); cout << "替换后: " << s3 << endl; // Hi World // 7. 反转 reverse(s3.begin(), s3.end()); cout << "反转后: " << s3 << endl; // dlroW iH // 8. 大小写转换 transform(s3.begin(), s3.end(), s3.begin(), ::tolower); cout << "小写: " << s3 << endl; // dlrow ih // 9. 遍历方式一:范围for for (char c : s3) { cout << c << " "; } cout << endl; // 10. 遍历方式二:下标访问 for (int i = 0; i < s3.length(); i++) { cout << s3[i]; } cout << endl; return 0; }四、C风格 vs C++ string 对比
特性 C风格 (char数组) C++ string 头文件 内存管理 手动(容易溢出) 自动(安全) 赋值操作 strcpy() = 直接赋值 拼接操作 strcat() + 或 += 比较操作 strcmp() ==, <, > 获取长度 strlen() .length() 或 .size() 查找操作 strstr() .find() 安全性 低(易缓冲区溢出) 高(自动管理) 使用便利性 繁琐 简洁直观 五、回文数判断完整代码(本题推荐写法)
#include <bits/stdc++.h> using namespace std; bool isPalindrome(int n) { string s = to_string(n); // 方法1:双指针(推荐,效率高) int left = 0, right = s.length() - 1; while (left < right) { if (s[left++] != s[right--]) return false; } return true; /* 方法2:反转比较(更简洁) string t = s; reverse(t.begin(), t.end()); return s == t; */ } int main() { int L, R; cin >> L >> R; int count = 0; for (int i = L; i <= R; i++) { if (isPalindrome(i)) count++; } cout << count << endl; return 0; }六、常见陷阱与注意事项
1. C风格字符串常见问题
问题 说明 解决方法 缓冲区溢出 目标数组空间不足 确保数组足够大,或使用strncpy 忘记'\0'结尾 字符串没有结束符 手动添加'\0',或使用安全函数 返回局部变量 返回栈上数组指针 使用static或动态分配 2. C++ string常见问题
问题 说明 解决方法 find()未找到 返回string::npos 判断 if (pos != string::npos) 下标越界 operator[]不检查边界 使用at()方法(会抛出异常) 迭代器失效 修改字符串后迭代器失效 重新获取迭代器 3. 最佳实践建议
- 优先使用C++ string:更安全、更易用
- 避免C风格字符串:除非必须与C库交互
- 使用范围for循环遍历:简洁且安全
- 注意find返回值:始终检查是否为string::npos
- const引用传递:函数参数用const string&避免拷贝
七、快速参考卡片
最常用的5个string操作
string s = "Hello"; // 初始化 s.length(); // 获取长度 s += " World"; // 拼接 if (s.find("World") != npos) {} // 查找 s.substr(0, 5); // 截取子串最常用的5个C风格操作
char s[20] = "Hello"; // 初始化 strlen(s); // 获取长度 strcat(s, " World"); // 拼接 strcpy(dest, s); // 复制 if (strcmp(s, "Hello") == 0) {} // 比较 -
通过的题目
-
最近活动
- 暑期集训-周测2 OI
- 培优初级第一次测试 IOI
- 2025学年第二学期初级班期末考 OI
- 2025学年第二学期信奥培优班期末考试 OI
- 2026-3青智体验课-阶段性检测 OI
- 20260306-入门班-结构体专题 IOI
- 20260118-初级班-期末测试 OI
- 中高级班期末测试 OI
- 2025中级班期中测试 OI
- CSP-J 2019真题卷 OI
- 9月综合测试卷 OI
- 暑期集训测试6(中高级班) OI
- CSP-J 2024真题卷(中级班) OI
- 暑期集训测试5:区间DP专题(中高级班) OI
- 暑期集训测试卷4(中高级班) OI
- 暑期集训测试卷3(中高级班) OI
- 暑期集训测试卷2(中高级班) OI
- 暑期集训测试卷1(中高级班) OI
-
最近编写的题解
This person is lazy and didn't write any solutions.
题目标签
- 普及-
- 35
- 模拟
- 19
- 语言入门
- 7
- 字符串
- 6
- 计算几何
- 6
- 循环结构
- 5
- 递归
- 5
- 分支结构
- 5
- 其他
- 4
- 顺序结构
- 4
- 递推
- 4
- 普及/提高-
- 3
- 数学
- 3
- 搜索
- 3
- 枚举
- 2
- 入门
- 2
- 素数判断
- 1
- 质数
- 1
- 筛法
- 1
- 循环嵌套
- 1