C++中的String的常用函数用法(最新推荐)
一. string的构造函数的形式1234567891011121314151617181920212223242526272829303132333435363738394041string str生成空字符串string s(str)生成字符串为str的复制品string s(str, strbegin,strlen)将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值string s(cstr, char_len)以C_string类型cstr的前char_len个字符串作为字符串s的初值string s(num ,c)生成num个c字符的字符串string s(str, stridx)将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值eg:string str1;//生成空字符串string str2(123456789);//生成1234456789的复制品string str3(12345, 0, 3);//结果为123string str4(012345, 5);//结果为01234string str5(5,1);//结果为11111string str6(str2, 2);//结果为3456789string str生成空字符串string s(str)生成字符串为str的复制品string s(str, strbegin,strlen)将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值string s(cstr, char_len)以C_string类型cstr的前char_len个字符串作为字符串s的初值string s(num ,c)生成num个c字符的字符串string s(str, stridx)将字符串str中从下标stridx开始到字符串结束的位置作为字符串初值eg:string str1;//生成空字符串string str2(123456789);//生成1234456789的复制品string str3(12345, 0, 3);//结果为123string str4(012345, 5);//结果为01234string str5(5,1);//结果为11111string str6(str2, 2);//结果为345678912345678910111213141516171819202122232425#include iostream#include stringusingnamespacestd;voidtest1(){string str1;//生成空字符串string str2(123456789);//生成1234456789的复制品string str3(12345, 0, 3);//结果为123string str4(0123456, 5);//结果为01234string str5(5,1);//结果为11111string str6(str2, 2);//结果为3456789coutstr2:str2endl;coutstr3:str3endl;coutstr4:str4endl;coutstr5:str5endl;coutstr6:str6endl;}intmain(){test1();return0;}二. string的大小和容量1. size()和length()返回string对象的字符个数他们执行效果相同。2. max_size()返回string对象最多包含的字符数超出会抛出length_error异常3. capacity()重新分配内存之前string对象能包含的最大字符数12345678voidtest2(){string s(1234567);cout size s.size() endl;cout length s.length() endl;cout max_size s.max_size() endl;cout capacity s.capacity() endl;}三. string的字符串比较1. C 字符串支持常见的比较操作符,,,,,!甚至支持string与C-string的比较(如 str”hello”)。在使用,,,这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得 比较。字典排序靠前的字符小比较的顺序是从前向后比较遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小(前面减后面)同时string (“aaaa”) string(aaaaa)。2. 另一个功能强大的比较函数是成员函数compare()。他支持多参数处理支持用索引值和长度定位子串来进行比较。他返回一个整数来表示比较结果返回值意义如下0相等 1大于 -1小于 (A的ASCII码是65a的ASCII码是97)12345678910111213141516171819202122voidtest3(){// (A的ASCII码是65a的ASCII码是97)// 前面减去后面的ASCII码0返回10返回-1相同返回0string A(aBcd);string B(Abcd);string C(123456);string D(123dfg);// aBcd 和 Abcd比较------ a Acout A.compare(B) A.compare(B) endl;// 结果1// cd 和 Abcd比较------- c Acout A.compare(2, 3, B):A.compare(2, 3, B) endl;// 结果1// cd 和 cd比较cout A.compare(2, 3, B, 2, 3): A.compare(2, 3, B, 2, 3) endl;// 结果0// 由结果看出来0表示下标3表示长度// 123 和 123比较cout C.compare(0, 3, D, 0, 3)C.compare(0, 3, D, 0, 3) endl;// 结果0}四. string的插入push_back() 和 insert()1234567891011121314voidtest4(){string s1;// 尾插一个字符s1.push_back(a);s1.push_back(b);s1.push_back(c);couts1:s1endl;// s1:abc// insert(pos,char):在制定的位置pos前插入字符chars1.insert(s1.begin(),1);couts1:s1endl;// s1:1abc}五、string拼接字符串append() 操作符1234567891011121314voidtest5(){// 方法一append()string s1(abc);s1.append(def);couts1:s1endl;// s1:abcdef// 方法二 操作符string s2 abc;/*s2 def;*/string s3 def;s2 s3.c_str();couts2:s2endl;// s2:abcdef}六、 string的遍历借助迭代器 或者 下标法1234567891011121314151617181920212223242526272829voidtest6(){string s1(abcdef);// 调用一次构造函数// 方法一 下标法for(inti 0; i s1.size() ; i ){couts1[i];}coutendl;// 方法二正向迭代器string::iterator iter s1.begin();for( ; iter s1.end() ; iter){cout*iter;}coutendl;// 方法三反向迭代器string::reverse_iterator riter s1.rbegin();for( ; riter s1.rend() ; riter){cout*riter;}coutendl;}七、 string的删除erase()1. iterator erase(iterator p);//删除字符串中p所指的字符2. iterator erase(iterator first, iterator last);//删除字符串中迭代器区间[first,last)上所有字符3. string erase(size_t pos 0, size_t len npos);//删除字符串中从索引位置pos开始的len个字符4. void clear();//删除字符串中所有字符1234567891011121314voidtest6(){string s1 123456789;// s1.erase(s1.begin()1); // 结果13456789// s1.erase(s1.begin()1,s1.end()-2); // 结果189s1.erase(1,6);// 结果189string::iterator iter s1.begin();while( iter ! s1.end() ){cout*iter;*iter;}coutendl;}八、 string的字符替换1. string replace(size_t pos, size_t n, const char *s);//将当前字符串从pos索引开始的n个字符替换成字符串s2. string replace(size_t pos, size_t n, size_t n1, char c); //将当前字符串从pos索引开始的n个字符替换成n1个字符c3. string replace(iterator i1, iterator i2, const char* s);//将当前字符串[i1,i2)区间中的字符串替换为字符串s12345678910111213voidtest7(){string s1(hello,world!);couts1.size()endl;// 结果12s1.replace(s1.size()-1,1,1,.);// 结果hello,world.// 这里的6表示下标 5表示长度s1.replace(6,5,girl);// 结果hello,girl.// s1.begin(),s1.begin()5 是左闭右开区间s1.replace(s1.begin(),s1.begin()5,boy);// 结果boy,girl.couts1endl;}九、 string的大小写转换tolower()和toupper()函数 或者 STL中的transform算法方法一使用C语言之前的方法使用函数进行转换12345678910111213141516#include iostream#include stringusingnamespacestd;intmain(){string s ABCDEFG;for(inti 0; i s.size(); i ){s[i] tolower(s[i]);}coutsendl;return0;}方法二通过STL的transform算法配合的toupper和tolower来实现该功能123456789101112131415#include iostream#include algorithm#include stringusingnamespacestd;intmain(){string s ABCDEFG;string result;transform(s.begin(),s.end(),s.begin(),::tolower);coutsendl;return0;}相关的我的另外一篇博客C对string进行大小写转换C对string进行大小写转换操作方法_C 语言_脚本之家十、 string的查找find1. size_t find (constchar* s, size_t pos 0) const;//在当前字符串的pos索引位置开始查找子串s返回找到的位置索引-1表示查找不到子串2. size_t find (charc, size_t pos 0) const;//在当前字符串的pos索引位置开始查找字符c返回找到的位置索引-1表示查找不到字符3. size_t rfind (constchar* s, size_t pos npos) const;//在当前字符串的pos索引位置开始反向查找子串s返回找到的位置索引-1表示查找不到子串4. size_t rfind (charc, size_t pos npos) const;//在当前字符串的pos索引位置开始反向查找字符c返回找到的位置索引-1表示查找不到字符5. size_tfind_first_of (const char* s, size_t pos 0) const;//在当前字符串的pos索引位置开始查找子串s的字符返回找到的位置索引-1表示查找不到字符6. size_tfind_first_not_of (const char* s, size_t pos 0) const;//在当前字符串的pos索引位置开始查找第一个不位于子串s的字符返回找到的位置索引-1表示查找不到字符7. size_t find_last_of(const char* s, size_t pos npos) const;//在当前字符串的pos索引位置开始查找最后一个位于子串s的字符返回找到的位置索引-1表示查找不到字符8. size_tfind_last_not_of (const char* s, size_t pos npos) const;//在当前字符串的pos索引位置开始查找最后一个不位于子串s的字符返回找到的位置索引-1表示查找不到子串1234567891011121314151617181920212223242526272829303132voidtest8(){string s(dog bird chicken bird cat);//字符串查找-----找到后返回首字母在字符串中的下标// 1. 查找一个字符串cout s.find(chicken) endl;// 结果是9// 2. 从下标为6开始找字符i返回找到的第一个i的下标cout s.find(i,6) endl;// 结果是11// 3. 从字符串的末尾开始查找字符串返回的还是首字母在字符串中的下标cout s.rfind(chicken) endl;// 结果是9// 4. 从字符串的末尾开始查找字符cout s.rfind(i) endl;// 结果是18-------因为是从末尾开始查找所以返回第一次找到的字符// 5. 在该字符串中查找第一个属于字符串s的字符cout s.find_first_of(13br98) endl;// 结果是4---b// 6. 在该字符串中查找第一个不属于字符串s的字符------先匹配dog然后bird匹配不到所以打印4cout s.find_first_not_of(hello dog 2006) endl;// 结果是4cout s.find_first_not_of(dog bird 2006) endl;// 结果是9// 7. 在该字符串最后中查找第一个属于字符串s的字符cout s.find_last_of(13r98) endl;// 结果是19// 8. 在该字符串最后中查找第一个不属于字符串s的字符------先匹配t--a---c然后空格匹配不到所以打印21cout s.find_last_not_of(teac) endl;// 结果是21}十一、 string的排序sort(s.begin(),s.end())1234567891011#include iostream#include algorithm#include stringusingnamespacestd;voidtest9(){string s cdefba;sort(s.begin(),s.end());couts:sendl;// 结果abcdef}十二、 string的分割/截取字符串strtok() substr()strtok():分割字符串123456789101112voidtest10(){charstr[] I,am,a,student; hello world!;constchar*split ,; !;char*p2 strtok(str,split);while( p2 ! NULL ){coutp2endl;p2 strtok(NULL,split);}}123456voidtest11(){string s1(0123456789);string s2 s1.substr(2,5);// 结果23456-----参数5表示截取的字符串的长度couts2endl;}到此这篇关于C中的String的常用函数用法总结的文章就介绍到这了

相关新闻

微信个人号API接口风险剖析与HTTP API高效对接实战

微信个人号API接口风险剖析与HTTP API高效对接实战

这几年做服务端对接,我几乎每隔一段时间就会遇到类似的需求:微信个人号能不能做API接口?能不能像公众号那样自动回复、自动拉群、自动发消息?说实话,每次看到这类问题我都挺感慨的——需求本身很真实,但市面…

2026/10/1 10:58:59 阅读更多 →
CTF新手入门指南:赛制、五大方向与练习平台全解析

CTF新手入门指南:赛制、五大方向与练习平台全解析

我是从Web方向入坑CTF的,后来为了补短板又把杂项、密码学、逆向都摸了一遍,现在回过头来看,新手阶段最痛苦的不是“不会做题”,而是“不知道该学什么、按什么顺序学”。网上的入门资料要么太散,要么直接甩一脸高难度赛…

2026/10/1 10:57:59 阅读更多 →
用Java从零搭建P2P视频通话系统:信令、RTP与NAT穿透实战

用Java从零搭建P2P视频通话系统:信令、RTP与NAT穿透实战

1. 视频通话的Java世界观:先搞懂我们要做什么 很多Java开发者一听到“视频通话”就头大,心里冒出的全是WebRTC、音视频编解码、回声消除这类听起来就复杂的专业术语,似乎这个东西天然就应该属于C开发者。实际上,纯用Java做一套可运…

2026/10/2 16:56:48 阅读更多 →

最新新闻

解决 Windows 安全中心内核隔离提示不兼容驱动 SD002.dat 的问题

解决 Windows 安全中心内核隔离提示不兼容驱动 SD002.dat 的问题

今天在 Windows 安全中心看到内存完整性未启用,本想启用,结果提示有不兼容的驱动 查看不兼容的驱动程序,发现是SD002.dat所致 于是我就在网上寻求方法,搜寻多次未果,最终在百度贴吧上找到了解决方法 原贴:急急急急急急…

2026/10/2 16:56:26 阅读更多 →
OpenClaw 159K Star 背后:开源 AI 助手如何重塑个人 AI 边界与 TaoToken 接入实践

OpenClaw 159K Star 背后:开源 AI 助手如何重塑个人 AI 边界与 TaoToken 接入实践

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

2026/10/2 16:56:26 阅读更多 →
TaoToken 统一 Key 接入:node+express+mongoose 项目鉴权与调用链实战

TaoToken 统一 Key 接入:node+express+mongoose 项目鉴权与调用链实战

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

2026/10/2 16:56:26 阅读更多 →
Fnet 云网安 NSOC 实战:把网络与安全告警接入 TaoToken 统一通道

Fnet 云网安 NSOC 实战:把网络与安全告警接入 TaoToken 统一通道

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

2026/10/2 16:56:26 阅读更多 →
OpenClaw 小龙虾 490 大模型一键切换:零基础落地全流程与 TaoToken 统一接入

OpenClaw 小龙虾 490 大模型一键切换:零基础落地全流程与 TaoToken 统一接入

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

2026/10/2 16:56:26 阅读更多 →
claude code(十):【Claude Code官方最佳实践8️⃣】:用 git worktrees 与 headless mode 搭建多 Claude 工作流程

claude code(十):【Claude Code官方最佳实践8️⃣】:用 git worktrees 与 headless mode 搭建多 Claude 工作流程

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

2026/10/2 16:55:26 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/2 6:09:11 阅读更多 →