新闻详情

新闻详情

首页 / 资讯中心 / 详情

【C++】string 使用总结——泪的总结:我的C++ string笔记全公开

发布时间:2026/9/29 5:52:50来源:尧图网络
【C++】string 使用总结——泪的总结:我的C++ string笔记全公开
5月23日每日学习string如果你想了解string的手搓实现可以点击这里文章目录5月23日每日学习string学习STL 的3个境界string1. 是什么2.头文件string3.构造函数**constructor**4.重载operator[ ]2个题目5.遍历重载operator[ ]迭代器范围for6.迭代器正向反向倒着遍历建议用‼️注意点7.auto‼️注意点8.capacity()5月26日每日学习9.vs 中的 sizeofstringx64环境x86环境10.resize、clear 和 reservereserve修改capacityclearresize增加有效长度size和length11.3个题目12.push_back、append和13.insert、erase和replace14.几种find‼️返回值15.operator16.getlinegetline其他的3种方法学习STL 的3个境界能用明理能扩展工作一两年才能达到string1. 是什么严格来说string不属于STL而是属于C标准库因为出现的比较早。string是一个管理字符串的类2.头文件string3.构造函数constructor默认无参string s1;默认是空字符串带参构造string s2(“38ffjdfj”);拷贝构造string s3(s2);string (const string str, size_t pos, size_t len npos);拷贝从下标为pos的地方向后的len个字符如果len后面的所有数就是直到结束如果不传最后一个参数就是npos-1就是size_t的最大值 直到最后string (const char* s, size_t n);拷贝前n个字符string (size_t n, char c);n个字符c来生成stringtemplate class InputIterator string (InputIterator first, InputIterator last);暂且不说4.重载operator[ ]➡️运算符重载的知识在这里⬅️作用能直接通过下标访问string中的字符返回值对应字符的引用两个函数​char operator[] (size_t pos);const char operator[] (size_t pos) const;2个题目917. 仅仅反转字母classSolution{public:stringreverseOnlyLetters(string s){intleft0,rights.size()-1;while(leftright){while(leftright(!isalpha(s[left]))){left;}while(leftright(!isalpha(s[right]))){right--;}swap(s[left],s[right--]);}returns;}};大数运算415. 字符串相加classSolution{public:stringaddStrings(string num1,string num2){intp1num1.size()-1;intp2num2.size()-1;string ret;intsum;intthisnum;intnext0;while(p10||p20){intn1(p10?num1[p1]-0:0);intn2(p20?num2[p2]-0:0);sumn1n2next;thisnumsum%10,nextsum/10;retthisnum0;p1--;p2--;}if(next)ret1;reverse(ret.begin(),ret.end());returnret;}};5.遍历重载operator[ ]迭代器范围for6.迭代器迭代器也有4种类型迭代器类型获取方式是否可修改iteratorbegin()/end()✅reverse_iteratorrbegin()/rend()✅const_iteratorcbegin()/cend()或 const 对象调用begin()❌const_reverse_iteratorcrbegin()/crend()或 const 对象调用rbegin()❌​iterator begin();类型是iteratorconst_iterator begin() const;‼️类型是const_iteratorconst版本只能读不能改正向begin首元素end尾元素的下一个元素string::iterator its.begin();while(it!s.end()){cout*it ;it;}反向倒着遍历建议用rbegin最后一个位置rend第一个字符的前一个位置string::reverse_iterator its.rbegin();while(it!s.rend()){cout*it ;it;}‼️注意点反向迭代器的类型不是iterator而是reverse_iterator建议用auto从rbegin到rend还是而不是–7.autoC11才有是一种自动的变量类型底层是迭代器‼️注意点不能直接定义变量一行定义多个变量变量必须为同类❌auto a1 3, a2 4.4;不能定义数组不能做函数参数和模板不一样可以做返回值auto➕引用 可以增加性能8.capacity()不算末尾的‘\0’扩容vs中初始空间是16第一次扩容是2倍扩后面是1.5倍Linux/gvs中的string在创建时有个Buf容量是16字符capacity是155月26日每日学习9.vs 中的 sizeofstring不同平台实现不一x64环境x86环境classstring{private:char_buff[16];// 16字节固定不变char*_str;// 指针size_t _size;// 长度size_t _capacity;// 容量};两个前提32 位x86模式所有指针、size_t类型都是4 字节64 位x64模式所有指针、size_t类型都是8 字节10.resize、clear 和 reservereserve修改capacity提前开空间避免扩容capacity 不包含‘\0’reserve想要100空间至少要开101——适应‘\0’不修改有效内容和长度size和length缩容不确定至少vs不缩可能开的空间更大clear删除有效 长度size和length不删capacityresize增加有效长度size和length插入的都是‘\0’11.3个题目917. 仅仅反转字母classSolution{public:stringreverseOnlyLetters(string s){intleft0,rights.size()-1;while(leftright){while(leftright(!isalpha(s[left]))){left;}while(leftright(!isalpha(s[right]))){right--;}swap(s[left],s[right--]);}returns;}};387. 字符串中的第一个唯一字符classSolution{public:intfirstUniqChar(string s){intarr[26]{0};for(autoe:s){arr[e-a];}intcnt0;for(autoe:s){if(arr[e-a]1)returncnt;cnt;}return-1;}};大数运算415. 字符串相加classSolution{public:stringaddStrings(string num1,string num2){intp1num1.size()-1;intp2num2.size()-1;string ret;intsum;intthisnum;intnext0;while(p10||p20){intn1(p10?num1[p1]-0:0);intn2(p20?num2[p2]-0:0);sumn1n2next;thisnumsum%10,nextsum/10;retthisnum0;p1--;p2--;}if(next)ret1;reverse(ret.begin(),ret.end());returnret;}};12.push_back、append和push_back只能尾插单个char字符append插入string字符串strings(abcdef);stringr(012345);s.append(r);coutsendl;//abcdef012345插入string字符串中从x开始的y个字符strings(abcdef);stringr(012345);s.append(r,2,3);coutsendl;//abcdef234插入char字符串strings(abcdef);s.append(hijk);coutsendl;//abcdefhijk插入char字符串的前n个strings(abcdef);s.append(hijk,2);coutsendl;//abcdefhi等等尾插更方便13.insert、erase和replace头插单个char字符的两种方式insert (iterator p, char c);s.insert(s.begin(),h);insert (size_t pos, size_t n, char c);s.insert(0,1,h);erase尾删erase (iterator p);s.erase(s.end()-1);14.几种find最后一个单词的长度需要用到getline函数作用string::find正向查找子串或字符返回下标未找到返回nposstring::rfind反向查找string::find_first_of查找字符串中任意字符第一次出现的位置string::find_first_not_of查找第一个不属于给定字符集的位置string::npos静态常量表示“未找到”‼️返回值找到了返回下标没找到返回:string::npos建议写成if (pos ! string::npos)15.operator运算符重载的定义和用法为什么不是类内运算符重载-为了能让字符串string也能成立类内重载的话第一个参数是this指针大数运算415. 字符串相加classSolution{public:stringaddStrings(string num1,string num2){intp1num1.size()-1;intp2num2.size()-1;string ret;intsum;intthisnum;intnext0;while(p10||p20){intn1(p10?num1[p1]-0:0);intn2(p20?num2[p2]-0:0);sumn1n2next;thisnumsum%10,nextsum/10;retthisnum0;p1--;p2--;}if(next)ret1;reverse(ret.begin(),ret.end());returnret;}};16.getline题目最后一个单词的长度需要用到getlinegetline基础用法getline(cin, s);→ 读到换行符\n就停止能完整读取带空格的一整行自定义结束符getline(cin, s, a);→ 读到字符 ‘a’ 就停止没有 ‘a’ 就一直读直到换行。其他的3种方法方法语法特点fgetsfgets(arr, sizeof(arr), stdin);头文件 cstdio保留 \n自动加 \0安全升级版 scanfscanf(%[^\n]s, arr);读至回车自动加 \0不能读空格开头getcharwhile ((chgetchar())!\n) {arr[i]ch;}边读边处理灵活需手动初始化数组为 0如果你想了解string的手搓实现可以点击这里
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

林火误报怎么降?这套无人机系统,把“看见”变成“看准” 2026/9/29 6:51:00

林火误报怎么降?这套无人机系统,把“看见”变成“看准”

林火监测最怕的,不是看不见。 而是明明看见了、也报警了,最后却发现只是雾气、扬尘,甚至一缕尾气。 一次误报,浪费的是人力和时间。 多次误报,消耗的就是整个监测体系的信任。 尤其在森林场景里,问题远比想…

阅读更多 →
TensorFlow 2024实战:从安装到部署的完整指南 2026/9/29 6:51:00

TensorFlow 2024实战:从安装到部署的完整指南

这两天又有同行在群里问:TensorFlow怎么装?装完跑起来为什么这么慢?2024年了是不是该直接转PyTorch?这问题很有代表性——PyTorch在论文和社区里的声量确实大,但打开很多公司的生产仓库或者部署岗位要求,Te…

阅读更多 →
【第50期】Python 栈与括号匹配:为什么只数字符数会把 )( 判成合法 2026/9/29 6:50:59

【第50期】Python 栈与括号匹配:为什么只数字符数会把 )( 判成合法

【第50期】Python 栈与括号匹配:为什么只数字符数会把 )( 判成合法 CSDN 完整教程 系列:《从小白到 AI 大模型开发工程师的进阶之路》 技术点:AI-0204 栈 主人公:小蓝伞 前置:AI-0202;AI-0203 本期产出&am…

阅读更多 →
2026年6月GEO团队哪家强榜单TOP6|TaoToken统一Key接入GEO评估框架与市场格局研究 2026/9/29 6:50:47

2026年6月GEO团队哪家强榜单TOP6|TaoToken统一Key接入GEO评估框架与市场格局研究

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
工厂网络常见故障处理全指南:从物理层到VLAN配置的实战排查方法 2026/9/29 6:50:47

工厂网络常见故障处理全指南:从物理层到VLAN配置的实战排查方法

简介:面向工厂网络运维人员、IT技术支持工程师和自动化产线维护者,这份PPT学习教案聚焦工业场景下网络故障的快速定位与处理,系统讲解从网络环境认知到命令诊断,再到故障排除的完整流程。内容包含工厂网络拓扑构成、接入/路由/交换…

阅读更多 →
DeepSeek V4 Flash 0731 配置实战:用 TaoToken 统一 Key 打通性能与成本三角 2026/9/29 6:50:47

DeepSeek V4 Flash 0731 配置实战:用 TaoToken 统一 Key 打通性能与成本三角

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉