当前位置: 首页 > news >正文

string略解

string

字符串类型,下标从0开始。

函数用法

定义

#include <iostream>
#include <string>string s;

初始化

string s="Hello,World!";sting a="Hello,";
string b="World!";
string s=a+b;string s("Hello,World!");
//上述三种s等价

输入

cin>>s;
//遇到空格或换行就截止
getline(cin,s);
//遇到换行才会截止

获取长度

int len=s.size();int len=s.length();
//上述代码等价

size()length 返回值:int

检查空串

if(s.empty()) printf("No");
else printf("Yes");
//空串输出No,非空串输出Yes

empty() 返回值:bool,空串返回1,非空返回0

访问指定字符

cout<<s[i]; //访问下标为i的元素cout<<s.at(i); //访问下标为i的元素
//上述代码等价

operator[]at() 返回值:char

截取子串

string sub=s.substr(i1,i2); //截取下标从i1到i2的字符

substr() 返回值:string,为截取到的字符串

查找字符

//查找子字符串在字符串中首次出现的位置
int id=s.find("sub"); //寻找sub在原字符串中首次出现的位置//查找子字符串在字符串中最后一次出现的位置
int id=s.rfind("sub"); //寻找sub在原字符串中最后一次出现的位置

find()rfind() 返回值:int,返回该子串首位在原字符串中的下标,如果目标不存在则返回-1

替换字符

//全部替换
s.assign("sub"); //将整个原字符串替换为sub
s.assign(str,i,len); //将整个原字符串替换为str从i下标开始的len个字符
s.assign(x,'a'); //将整个原字符串替换为x个字符a(a必须是char类型)//区间修改
s.replace(i,len,"sub"); //将原字符串中从下标i开始的len位替换为sub//单点修改
s[i]='a'; //将原字符串i下标的元素替换为a(a必须是char类型)

插入字符

//在字符串末尾添加内容
s.append("sub"); //将sub添加到原字符串末尾s+=sub; //将sub添加到原字符串末尾
//上述代码等价
s.push_back('a'); //将字符a添加到原字符串末尾(a必须是char类型)//在指定位置插入内容
s.insert(i,"sub"); //将sub插入到原字符串下标为i的位置

删除字符

//删除指定字符
s.erase(i,len); //删除从下标i开始的len位字符//清空字符串
s.clear(); //清空整个字符串//从结尾删除
s.pop_back(); //删除字符串中最后一位字符

指针

const char* c=s.c_str();const char* c=s.data();
//上述代码等价

c_str()data() 返回值:const char*,获得一个指向原字符串的指针

比较/匹配

//比较两个字符串
int res=s.compare("other"); //比较s和other
if(res==0) printf("Yes");
else printf("No");
//相同输出Yes,不相同输出No//查找第一个匹配任意字符的位置(只要给定字符串中任意一位匹配到了就会返回)
size_t id=s.find_first_of("abc");
//查找第一个出现的字母'a','b','c'中的任意一个字符的位置//查找最后一个匹配任意字符的位置(只要给定字符串中任意一位匹配到了就会返回)
size_t id=s.find_last_of("abc");
//查找最后一个出现的字母'a','b','c'中的任意一个字符的位置//查找第一个不匹配任意字符的位置(只要某个字符串不在给定字符内就会返回)
size_t id=s.find_first_not_of("abc");
//查找第一个不属于'a','b','c'中任意一个字符的位置//查找最后一个不匹配任意字符的位置(只要某个字符串不在给定字符内就会返回)
size_t id=s.find_last_not_of("abc");
//查找最后一个不属于'a','b','c'中任意一个字符的位置

compare() 返回值:int,相同返回0,不相同返回-1

find_first_of(),find_last_of(),find_first_not_of(),find_last_not_of()

返回值:size_t,匹配到对应的会返回下标,没有匹配到会返回npos

反转

//反转整个字符串
reverse(s.begin(),s.end());//反转部分字符
reverse(s.begin()+i,s.begin()+j+1); //反转下标从i到j的部分

转换

//int转string
s=to_string(x); //将int类型的x转为string类型的s//string转int
x=stoi(s); //将string类型的s转为int类型的x//char[]转string (c是char[]类型)
s=c; //将char[]类型的c转为string类型的ss.assign(c); //将char[]类型的c转为string类型的s
//上述方法等效//string转char[] (c是char[]类型)
s.copy(c,len,i); //将string类型的s中从下标i开始的len位转换为char[]类型

copy() 返回值:size_t,返回复制的字符数量

遍历

  1. 使用基于范围的for循环
for(char c:s){cout<<s<<" ";
}

直接遍历了原string的内容

  1. 使用下标访问
for(int i=0;i<s.length();i++){cout<<s[i]<<" ";
}

常用于修改字符,但是它涉及到字符串的拷贝,会有额外开销

  1. 使用迭代器
for(auto i=s.begin();i!=s.end();i++){cout<<*i<<" ";
}
http://www.rkmt.cn/news/22840.html

相关文章:

  • 《程序员修炼之道》 阅读笔记二
  • 是时候告别向日葵、Todesk、TeamViewer了,快速搭建自托管服务器RustDesk
  • $\text{Catalan}$ 数 卡特兰数
  • 风险评估的流程和各阶段的工作内容
  • 稀疏离散分数阶傅里叶变换的MATLAB实现
  • 2025 年导轨丝杆源头厂家最新推荐榜,技术实力与市场口碑深度解析的优质企业榜单东莞/直线/滚珠/孚雷导轨丝杆厂家推荐
  • far的数据类型
  • WSL+Ubuntu + AI (Claude, SpecKit, iFlow) 常用命令
  • 事件在react中的处理方式?
  • 农经权报表生成小程序介绍
  • Linux 中检测gz压缩文件是否损坏
  • 2025年信息流代运营服务商权威推荐榜:专业投放策略与高转化效果深度解析,助力企业精准营销
  • 权限维持-Windows权限维持
  • 1017
  • 2025 广州人力资源/派遣/外包/劳务外包/人事代理/推荐榜:精典人才创新 5 星领跑,适配招聘 / 测评 / 培训全场景企业需求
  • 2025 年选矿行业 2 号油厂家最新推荐排行榜:环保型 / 新型 / JQ202/101/QX/BK201/323 起泡剂等产品权威筛选,助力企业选对优质供应商
  • 2025 年探伤仪厂商最新推荐榜单:涡流 / 超声波 / 管材 / 焊缝 / 无损探伤仪优质企业权威盘点
  • 2025 年罗茨风机厂家最新推荐排行榜权威发布!深度解析各品牌优势助企业精准选型UNTW无泄漏/BRW水冷式罗茨风机厂家推荐
  • 【树莓派】安装PostgreSQL
  • 【数据结构】数据结构秘籍:如何衡量“查找”的快慢?ASL是关键! - 教程
  • 压缩 PDF 文件大小(3 大实用的 Python 库) - E
  • 请输入标题
  • 2、docker入门基本概念 - 实践
  • 国产项目管理工具Gitee的崛起:数字化转型浪潮下的本土化突围
  • 2025年精密磨床/CNC机械加工厂家推荐榜单:涵盖铣床/车床/磨削/多轴/复合加工,铝/不锈钢/钛合金/模具钢/塑料件定制,汽车/医疗/航空航天/机器人零件及模具工装夹具加工
  • 开发日志
  • Gitee 2025:中国开发者生态的崛起与本土化优势
  • JavaBean知识总结及范例
  • 2025 年家装管道生产厂家最新推荐排行榜:覆盖云南昆明贵州贵阳四川成都重庆,精选优质 PPR/PVC 管道品牌,解决选购难题
  • 强合规行业DevOps选型:告别工具拼凑,找到真正适配的国产化DevOps方案