news 2026/5/30 16:10:03

C++中的String的常用函数用法总结

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++中的String的常用函数用法总结

C++ 中 string 的常用函数用法总结(全面实用版)

C++ 中字符串使用std::string(位于<string>头文件),它是标准库提供的强大、安全、易用的字符串类,远优于 C 风格的 char 数组。

1. 头文件与命名空间
#include<string>// 必须包含usingnamespacestd;// 常用,或写 std::string
2. 基本创建与初始化
string s1;// 空字符串string s2="hello";// C风格字符串初始化strings3("world");// 构造函数strings4(5,'a');// "aaaaa"strings5(s2);// 拷贝构造strings6(s2,1,3);// 从s2第1位开始取3个字符 → "ell"
3. 常用成员函数大全(按功能分类)
函数用法示例说明返回值/效果
长度与容量
size() / length()s.length()返回字符串长度(字符数)size_t
empty()s.empty()判断是否为空bool
capacity()s.capacity()当前分配的内存容量size_t
reserve(n)s.reserve(100)预分配空间,避免频繁扩容void
增删改
+= / append()s += “abc”;
s.append(“def”)
追加字符串string&
push_back(ch)s.push_back(‘x’)追加单个字符void
insert(pos, str)s.insert(2, “xyz”)在pos位置插入strstring&
erase(pos, len)s.erase(0, 3)从pos开始删除len个字符string&
clear()s.clear()清空字符串void
pop_back()s.pop_back()删除最后一个字符(C++11)void
访问与修改
[ ]s[0] = ‘H’访问/修改字符(不检查边界)char&
at()s.at(0) = ‘H’访问/修改字符(越界抛异常)char&
front()char c = s.front()第一个字符(C++11)char&
back()char c = s.back()最后一个字符(C++11)char&
查找
find(str, pos=0)s.find(“abc”)从pos开始查找str,返回首次出现位置size_t(没找到返回 string::npos)
rfind(str, pos=npos)s.rfind(“abc”)从pos向前找最后一次出现位置size_t
find_first_of(str)s.find_first_of(“aeiou”)找第一个元音位置size_t
find_last_of(str)s.find_last_of(“xyz”)找最后一个匹配字符位置size_t
find_first_not_of(str)找第一个不在str中的字符size_t
子串
substr(pos, len)string t = s.substr(1, 3)从pos开始取len个字符string
替换
replace(pos, len, str)s.replace(0, 5, “Hi”)用str替换从pos开始的len个字符string&
比较
compare(str)s.compare(t)字典序比较int(<0: s<t, =0相等, >0 s>t)
== != < > <= >=s == t支持直接比较运算符bool
转换
c_str()const char* p = s.c_str()获取C风格字符串(以\0结尾)const char*
data()const char* p = s.data()获取字符数组(C++17前不一定\0结尾)const char*
copy(char* buf, len, pos=0)s.copy(buf, 5, 0)拷贝到buf(不自动加\0)size_t
4. 与 C 风格字符串互转
// string → char*string s="hello";constchar*c=s.c_str();// 用于 printf、fopen 等需要 const char* 的函数// char* → stringcharch[]="world";strings2(ch);// 直接构造string s3=ch;// 赋值
5. 输入输出(与 cin/cout)
string s;cin>>s;// 读取单词(遇到空格停止)getline(cin,s);// 读取整行(包含空格,推荐)cout<<s<<endl;
6. 实用示例代码
#include<iostream>#include<string>usingnamespacestd;intmain(){string s=" Hello World! ";// 常用操作组合s=s.substr(2,5);// "Hello"s.append(" C++");// "Hello C++"s.insert(5,",");// "Hello, C++"s.replace(6,3,"World");// "Hello, World"// 查找size_t pos=s.find("World");if(pos!=string::npos){cout<<"找到位置: "<<pos<<endl;// 输出 7}// 去除首尾空格(C++11前手动实现)s.erase(0,s.find_first_not_of(" \t"));s.erase(s.find_last_not_of(" \t")+1);cout<<"\""<<s<<"\""<<endl;// "Hello, World"return0;}
7. 注意事项与最佳实践
  • size()length()完全等价。
  • string::npos是常量,通常为 -1(size_t 的最大值),用于表示“未找到”。
  • []不检查边界,越界未定义行为;at()检查边界,越界抛out_of_range异常。
  • c_str()返回的指针在 string 被修改或销毁后失效。
  • string 是可拷贝的,但大字符串建议传 const string& 避免拷贝。
  • C++11 后推荐使用front()back()pop_back()

掌握以上函数,就能轻松处理 95% 的字符串操作需求!如果有特定场景(如分割字符串、转数字),欢迎继续提问。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 15:42:40

【windows】常见的系统环境变量,如%appdata%表示什么意思

Windows 常见系统环境变量详解 Windows 中的环境变量&#xff08;Environment Variables&#xff09;是用 %变量名% 包围的形式表示的路径或值&#xff0c;用于快速引用系统目录、配置等。它们分为用户变量&#xff08;仅当前用户&#xff09;和系统变量&#xff08;所有用户&…

作者头像 李华
网站建设 2026/5/28 13:37:57

2026都到了!为什么说AI产品经理是未来5年最值得all in的岗位?

如果你要问我&#xff1a;未来5年&#xff0c;什么岗位最有“钱”景、最值得all in&#xff1f; 我的答案只有一个——AI产品经理。 这不是我瞎说。过去一年&#xff0c;我跟超过200位职场人聊过这个话题。我发现&#xff0c;几乎所有想抓住AI机会的人&#xff0c;都卡在了这3种…

作者头像 李华
网站建设 2026/5/28 17:24:21

一边是35岁危机,一边是AI高薪。普通程序员如何选对路、不掉队?

35岁&#xff0c;程序员的十字路口&#xff0c;焦虑与机遇并存。技术浪潮汹涌&#xff0c;经验与智慧沉淀&#xff0c;适者生存。AI红利&#xff0c;工具赋能&#xff0c;引领未来。 35岁程序员危机&#xff0c;时代洪流中的思考 一、年龄与技能的双重焦虑 技术浪潮的冲击。新技…

作者头像 李华
网站建设 2026/5/29 16:46:34

CES 2026 | 从感知到执行 TI打破L3级智驾规模化落地的“三道墙”

作者&#xff1a;毛烁当自动驾驶的竞争从L2级向L3级迈进的关键节点&#xff0c;其面临的挑战往往不再只来自算法本身&#xff0c;而是被三堵“工程墙”所约束——算力能效边界、感知成本曲线&#xff0c;以及车内通信架构的割裂。在CES 2026上&#xff0c;TI在拉斯维加斯亮相了…

作者头像 李华
网站建设 2026/5/28 23:26:33

【VTK手册033】深入解析 vtkProgrammableFilter 的原理与应用

【VTK手册033】深入解析 vtkProgrammableFilter 的原理与应用0. 概述 在基于 VTK&#xff08;Visualization Toolkit&#xff09;的算法开发过程中&#xff0c;若需实现特定的数据处理逻辑&#xff0c;通常的做法是继承 vtkAlgorithm 或其子类并重写 RequestData 方法。然而&am…

作者头像 李华