当前位置: 首页 > 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.hskmm.com/?act=detail&tid=32891

相关文章:

  • 《程序员修炼之道》 阅读笔记二
  • 是时候告别向日葵、Todesk、TeamViewer了,快速搭建自托管服务器RustDesk
  • 史馆
  • firecrawl 私有部署(test)
  • $\text{Catalan}$ 数 卡特兰数
  • java作业3
  • 大模型 | VLM 初识及在自动驾驶场景中的应用
  • CF1977 Codeforces Round 948 (Div. 2) 游记(VP)
  • 别被波形“骗” 了!差分探头与无源探头测量不一致的 5 大关键因素
  • 2025 年展览会服务商最新推荐榜权威发布:22 年经验甄选十强品牌,助力企业参展高效决策
  • 2025年信息流代运营服务商权威推荐榜单:专业投放策略与效果优化服务口碑之选
  • 2025 年焊把线厂家最新推荐榜:国标欧标铜芯软焊把线优质企业排行,优质品牌助力选购欧标/铜芯/软/耐高温焊把线厂家推荐
  • 基于MATLAB的倒立摆控制实现方案
  • 2025 年展会服务商最新推荐排行榜:聚焦一站式服务与高效执行能力的优质企业榜单瓷砖/暖通/照明/门窗/玻璃/厨卫/卫浴/灯饰展会厂家推荐
  • 数据迁移mysql--sr
  • iOS 26 App 开发阶段性能优化全流程,从监控到调优的多工具协作实践
  • MATLAB实现语音去混响与去噪
  • 风险评估的流程和各阶段的工作内容
  • 无穷小和无穷大
  • Adobe Media Encoder 2025 免费版一键安装包完整安装教程(含下载安装包)
  • 2025 年最新推荐船用气囊源头厂家权威排行榜:聚焦专业生产与可靠供应,助力精准选购优质产品橡胶/船舶/防撞/山东/港口用船用气囊厂家推荐
  • 【隐语SecretFlow用户案例】亚信科技构建统一隐私计算框架探索实践
  • Zynq选型
  • 2025 西安楼盘最新推荐排行榜:聚焦优质教育配套的品质楼盘精选高端/刚需/品牌/现房/优质楼盘推荐
  • 稀疏离散分数阶傅里叶变换的MATLAB实现
  • 2025 年导轨丝杆源头厂家最新推荐榜,技术实力与市场口碑深度解析的优质企业榜单东莞/直线/滚珠/孚雷导轨丝杆厂家推荐
  • Linux-简单命令 - 实践
  • far的数据类型
  • Zemax 2019下载地址与安装教程
  • 2025 年隔音门优质厂家最新推荐排行榜:覆盖剧院 /ktv/ 防火 / 实验室等多场景,解析实力口碑助您选对产品