C++中string函数用法总结

一,string的构造函数

string()  //无参构造,初始化为空串
string(const string& str)  //用str拷贝构造
string(size_t n,char c)   //用n个字符c初始化

string(const char* s,size_t n) //用字符串s的前n个字符初始化
string(const string& str,size_t pos,size_t len=npos) //将字符串str,从下标pos位置开始,选取长度为len个的字符,来初始化

string str1;                   //空串
string str2("hello world");   //用"hello world"拷贝构造str2
string str3(4, 'x');          //用4个字符'x'初始化
string str4(str2, 5, 6);      //用str2中,从下标为5位置开始,长度为6的字符串初始化
string("hello world", 5);     //用字符串"hello world" 前5个字符初始化

 

string(const string& str,size_t pos,size_t len=npos)  

注:上面的缺省值npos,定义为:size_t npos=-1. npos为最大值,表示不传参数时,会用str中pos位置开始后的所有字符来初始化

二,string的大小和容量

size()和length():返回string对象的字符个数

capacity():string对象的容量,也就是可以存储字符的最大个数

string str("hello world");
cout << "size==" << str.size() << endl;
cout << "length==" << str.length() << endl;
cout << "capacity==" << str.capacity() << endl;

 

三,string的插入 

insert

string str1("hello world");
str1.insert(5, "xxxxxx");  //在5位置之前插入字符串"xxxxxx"
cout << str1 << endl;string str2("hello world");
str2.insert(5, 2, '%');   //在5位置之前插入2个"%"
cout << str2 << endl;string str3("hello world");
string::iterator it1 = str3.begin();
str3.insert(it1, '#');    //在开始位置之前插入'#'
cout << str3 << endl;string str4("hello world");
string::iterator it2 = str4.begin();
str4.insert(it2, 2, '#'); //在开始位置之前插入两个'#'
cout << str4 << endl;

 push_back(尾插)

string s;         //空串
s.push_back('a'); //尾插
s.push_back('c');
s.push_back('b');  //s中存放的字符串为"abc"

四,string的遍历

迭代器遍历或者下标遍历

string str1("hello world");//下标遍历
for (int i = 0; i < str1.size(); i++)
{cout << str1[i];
}
cout << endl;//迭代器遍历
//正向迭代器
string::iterator it1 = str1.begin();
while (it1 != str1.end())
{cout << *it1;it1++;
}
cout << endl;//反向迭代器
string::reverse_iterator it2 = str1.rbegin();
while (it2 != str1.rend())
{cout << *it2;it2++;
}
cout << endl;//const正向迭代器
const string s("hello world");
string::const_iterator cit = s.begin();
while (cit != s.end())
{cout << *cit;cit++;
}
cout << endl;//const反向迭代器
string::const_reverse_iterator crit = s.rbegin();
while (crit != s.rend())
{cout << *crit;crit++;
}
cout << endl;

 五,string的删除

erase(iterator p);                                //删除p所指位置的字符
erase(iteraror first,iterator last)          //迭代器区间删除,删除first到last区间的字符
erase(size_t pos,size_t len=npos)    //删除pos位置开始的len个字符

string str("hello world");
string::iterator it = str.begin();str.erase(it);            //删除开始位置字符
cout << str << endl;str.erase(it, it + 2);   //删除迭代器区间
cout << str << endl;str.erase(5, 1);        //删除下标为5的1个字符
cout << str << endl;

 六,string的字符替换

replace(size_t pos,size_t n,const char* s)         //将pos位置开始的n个字符替换成字符串s
replace(size_t pos,size_t n,size_t n1,char c)     //将pos位置开始的n个字符,替换成n1个字符c
replace(iterator it1,iterator it2,const char* s) //将迭代器区间的字符串替换成串s

string str("hello world");
str.replace(5, 1, "%%");  //将5位置的1个字符替换成字符串s
cout << str << endl;str.replace(1, 1, 2, 'h');  //将1位置的1个字符替换成2个字符'h'
cout << str << endl;str.replace(str.begin(), str.begin() + 2, "xx");
cout << str << endl;

七,string的分割(截取子串)

string str("hello world");
string s = str.substr(2, 5);  //从2位置开始截取5个字符的子串
cout << s << endl;

八,string的查找

find(char c,size_t pos=0)    //从pos位置开始查找字符c,返回下标,查找失败返回-1
find(const char* s,size_t pos=0)    //从pos位置开始查找子串s,返回下标,查找失败返回-1
rfind(char c,size_t pos=npos)   //从pos位置开始反向查找字符c,返回下标,查找失败返回-1
rfind(const char* s,size_t pos=npos)  //从pos位置开始反向查找子串s,返回下标,查找失败返回-1

string s("test.cpp.zip");
size_t pos = s.find('.');      //正向查找
string s2 = s.substr(pos);
cout <<"s2=="<< s2 << endl;

  

string s("test.cpp.zip");
size_t pos = s.rfind('.');      //反向查找
string s2 = s.substr(pos);
cout <<"s2=="<< s2 << endl;

 find_first_of(const char* s,size_t pos=0)  //从pos位置开始,查找子串s,返回位置,-1表示找不到
 find_first_not_of(const char* s,size_t pos=0) //从pos位置开始,查找第一个不位于子串s的字符,返回位置,-1表示找不到
find_last_of(const char* s,size_t pos=npos)   //从pos位置开始,查找最后一个位于子串s的字符,返回位置,-1表示找不到
find_last_not_of(const char* s,size_t pos=npos)//从pos位置开始,查找最后一个不位于子串s的字符,返回位置,-1表示找不到

string str("Please, replace the vowels in this sentence by asterisks.");
cout << str << endl;
size_t found = str.find_first_of("abcdef"); //在str中找字符a b c d e f
while (found != string::npos)
{str[found] = '*'; //将找到的位置改成'*'found = str.find_first_of("abcdef",found+1);
}
cout << str << endl;

 也可以用作分割路径

void SplitFileName(string s)
{cout << s << endl;size_t found = s.find_last_of("\\/");cout << "path:" << s.substr(0,found) << endl;cout << "file:" << s.substr(found+1) << endl;}
void test_string10()
{string str1("usr/bin/bash");string str2("D:\\code2\\pratice-1\\pratice-1\\x64");SplitFileName(str1);SplitFileName(str2);
}

九,operator+和opertor+= 

string s1("hello world");
string s2 = s1 + "xxx";
s1 += "xxx";
cout << s1 << endl;
cout << s2 << endl;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/445779.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【最优化方法】最速下降法

给出点 x [1,4,5,8,12] y [7,9,15,14,27] 要找出温度和冰淇淋销量之间的关系&#xff0c;通过线性回归来拟合求出属性和结果之间的线性关系。 如果直接把这些点连起来&#xff0c;是吃力不讨好的&#xff0c;因为如果有新数据进来大概率不在这条线上&#xff0c;这个行为也…

Prometheus + Grafana 监控 MySQL 数据库

文章目录 1、前置介绍2、搭建流程2.1、安装 Docker2.2、安装 MySQL2.3、安装 MySQL Exporter2.4、安装 Prometheus2.5、安装 Grafana 1、前置介绍 本次监控平台搭建&#xff0c;我使用2台阿里云服务器来完成本次的搭建部署操作&#xff0c;配置如下&#xff1a; 阿里云ECS1&am…

【Kubernets】配置类型资源 Etcd, Secret, ConfigMap

文章目录 所有资源概览Etcd详细说明一、基本概念二、主要功能三、架构与组件四、数据模型与操作五、安全与认证六、集群部署与管理 Secret详细说明一、Secret 的类型二、Secret 的创建三、Secret 的使用四、Secret 的更新与删除五、Secret 的安全性 ConfigMap详细说明一、Confi…

2024年恩施职称评前公示

此次公示共有422人&#xff0c;初级职称、中级职称、馆员、畜牧师、助理馆员、三级演员、农艺师等均在一起进行评审前的公示。 根据恩施州职称改革工作领导小组办公室《关于报送2024年度恩施州中初级专业技术职务评审材料的通知》&#xff08;恩施州职改办〔2024〕14号&#xf…

jdk环境变量配置--小总结

1、jdk安装路径变量 2、在path下添加环境变量

【Python Django + Vue】酒店在线预订系统:用技术说话!

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

【JavaEE初阶】文件-IO之实现文件系统的操作如何进行实现

前言 &#x1f31f;&#x1f31f;本期讲解关于文件IO的操作&#xff0c;这里涉及到比较常用的文件操作哦~~~ &#x1f308;上期博客在这里&#xff1a;【JavaEE初阶】CAS的ABA问题&#xff0c;JUC多线程编程有用的相关类-CSDN博客 &#x1f308;感兴趣的小伙伴看一看小编主页&a…

支持向量机-笔记

支持向量机&#xff08;Support Vector Machine, SVM&#xff09; 是一种强大的监督学习算法&#xff0c;广泛应用于分类和回归任务&#xff0c;特别是在分类问题中表现优异。SVM 的核心思想是通过寻找一个最优超平面&#xff0c;将不同类别的数据点进行分割&#xff0c;并最大…

数据结构 ——— 顺序表oj题:有效的括号

目录 题目要求 代码实现 题目要求 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个…

[单master节点k8s部署]37.微服务(一)springCloud 微服务

微服务架构的一个重要特点是&#xff0c;它与开发中使用的具体编程语言或技术栈无关。每个微服务都可以使用最适合其功能需求的语言或技术来实现。例如&#xff0c;一个微服务可以用Java编写&#xff0c;另一个微服务可以用Python、Go、Node.js等编写。微服务架构允许这种灵活性…

Gin项目的初始化步骤和常见错误记录

相信很多人对Go的环境安装和Gin项目的初始化都已经手拿把攥很是熟练了&#xff0c;本节介绍一个自己新建Go项目时非常好用的设置以及记录一下Gin项目的初始化过程和常能遇到的错误。 一个容易忽略的Go ENV 在安装了Go的电脑中&#xff0c;我们可以在命令行执行 go env 命令&…

04 什么是线性表

什么是线性表 一、为什么需要线性表 例如&#xff1a; ​ 在程序中保存指定班级的所有的学生信息&#xff08;暂时只需要处理姓名、年龄&#xff09;&#xff0c;该班级最多可容纳30人&#xff0c;且可进行数量上的增减。 业务功能&#xff1a; ​ 1&#xff09;这个项目中…

【Go】GO语言知识总结浅析

Go语言是一种现代化的编程语言&#xff0c;由Google于2007年设计并于2009年发布。它旨在使编程变得简单、高效&#xff0c;并且可以在多核处理器上轻松构建高性能应用。Go语言的编程思想、发展历史、版本特点、运行原理、数据类型、应用场景&#xff0c;以及在web开发、网络编程…

云轴科技ZStack入选信通院《高质量数字化转型产品及服务全景图》AI大模型图谱

近日&#xff0c;由中国互联网协会中小企业发展工作委员会主办的“2024大模型数字生态发展大会暨铸基计划年中会议”在北京成功召开。会上发布了中国信通院在大模型数字化等领域的多项工作成果&#xff0c;其中重点发布了《高质量数字化转型产品及服务全景图&#xff08;2024上…

ESP32利用WebServer进行设备配置

目标需求 利用esp32的WebServer功能&#xff0c;展示一个网页&#xff0c;对里面的参数进行配置&#xff0c;并以json文本格式保存到flash里面。 1、定义HTML const char index_html[] PROGMEM R"rawliteral( <!DOCTYPE html> <html lang"en"> …

使用SpringMVC搭建WEB项目时报错404的问题排查解决以及web.xml配置文件init-param行标红问题

一、使用SpringMVC搭建WEB项目时报错404的问题排查解决 很早前&#xff08;4年前&#xff09;就把这个搭建过&#xff0c;但今天运行的时候就是报404错误&#xff0c;见文章&#xff1a; JAVA开发中SpringMVC框架的使用及常见的404问题原因以及SpringMVC框架基于注解的开发实例…

Apache SeaTunnel 9月份社区发展记录

各位热爱 SeaTunnel 的小伙伴们&#xff0c;9月份社区月报来啦&#xff01;这里将定期更新SeaTunnel社区每个月的重大进展&#xff0c;欢迎关注&#xff01; 月度Merge Stars 感谢以下小伙伴上个月为 Apache SeaTunnel 做的精彩贡献&#xff08;排名不分先后&#xff09;&…

【网络安全】CVE-2024-46990: Directus环回IP过滤器绕过实现SSRF

未经许可,不得转载。 文章目录 背景漏洞详情受影响版本解决方案背景 Directus 是一款开源 CMS,提供强大的内容管理 API,使开发人员能够轻松创建自定义应用程序,凭借其灵活的数据模型和用户友好的界面备受欢迎。然而,Directus 存在一个漏洞,允许攻击者绕过默认的环回 IP …

问卷调查毕设计算机毕业设计投票系统SpringBootSSM框架

目录 一、引言‌ ‌二、需求分析‌ 用户角色‌&#xff1a; ‌功能需求‌&#xff1a; ‌非功能需求‌&#xff1a; ‌三、系统设计‌ ‌技术选型‌&#xff1a; ‌数据库设计‌&#xff1a; ‌界面设计‌&#xff1a; ‌四、实现步骤‌ ‌后端实现‌&#xff1a; …

UM981最小系统推荐设计

L1&#xff1a;推荐使用 0603 封装的 68nH 射频电感 C1&#xff1a;推荐使用 100nF 100pF 两个电容并联 C2&#xff1a;推荐使用 100pF 电容 C3&#xff1a;推荐使用 n*10μF1*100nF 电容并联&#xff0c;总容值不小于 30μF R1&#xff1a;推荐使用 10kΩ电阻 注&#x…