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

C++STL专题-string类

目录

1.标准库中的string类

1.1 string类

2.2 auto和范围for

2.2.1 auto关键字

2.2.2 范围for

2.3 string类的常用接口讲解

1.string类对象的常见构造

2.元素访问

3.迭代器(iterator)

3.1 begin 和 end

3.2 rbegin 和 rend

4.容器

5.修改

5.1 append

5.2 assign

5.3 insert

5.4 erase

5.5 replace

5.字符串操作

5.1 find

6.getline函数

6.1 第一种声明方式是传递三个参数。

6.2 第二种声明方式是传递两个参数


1.标准库中的string类

1.1 string类

头文件:#include<string>

string是管理字符串的类,在使用string类时,必须包含#include头文件以及using namespace std;

string类

其实string是typedef出来的,原型为basic_string<char>

 

2.2 auto和范围for

2.2.1 auto关键字

主要作用:替换长类型

auto错误使用总结:
(1).auto做类型不初始化

int main()
{auto e;//错误return 0;
}

(2).auto不能定义数组

int main()
{auto a[10] = { 1,2,3,4 };//错误return 0;
}

(3).auto不能做函数的参数(但是可以做返回值)

int add(auto a, auto b)//错误
{return a + b;
}
int main()
{int a = 1, b = 2;cout << add(a, b);return 0;
}

2.2.2 范围for

(1).C++11中引入了基于范围的for循环。for循环后的括号由冒号“ :”分为两部分:第一部分是范围
内用于迭代的变量
第二部分则表示被迭代的范围,自动迭代,自动取数据,自动判断结束。

(2).范围for可以作用到数组和容器对象上进行遍历。

(3).范围for的底层很简单,容器遍历实际就是替换为迭代器。

遍历数组:

int main()
{int a[10] = { 1,2,3,4,5 };for (auto num : a){cout << num << ' ';}return 0;
}

2.3 string类的常用接口讲解

1.string类对象的常见构造

重点
(constructor)函数名称功能说明
string()   (重点)构造空的string类对象,即空字符串
string(const char* s)   (重点)用C-string来构造string类对象
string(const string&s)   (重点)拷贝构造函数

int main()
{string s1;string s2("666");string s3(s2);cout << "string() " << s1 << endl;cout << "string(const char* s) " << s2 << endl;cout << "string(const string&s) " << s3 << endl;
}

运行结果:

 

了解
(constructor)函数名称功能说明
string(size_t n, char c)开辟n个空间,全部初始化为c
string(const string& str,size_t pos,size_t len=npos)从第pos个位置开始,拷贝len个字符
string(const char* s,size_t n)

去字符串前n个

int main()
{string s1("hello world");string s2(5, 'a');string s3(s1, 5, 6);string s4("hello", 4);cout << "string(size_t n, char c):" << s2 << endl;cout <<"string(const string& str,size_t pos,size_t len=npos):"<<s3 << endl;cout <<"string(const char* s,size_t n):"<< s4 << endl;
}

运行结果:

2.元素访问

operator[]重载[]号,可以利用下标直接获取改下标的字符,并且可以修改。
at与[]功能类似,如果给定的下标超出字符的长度范围,系统会抛出 out_of_range 异常。也支持修改。
back获取最后一个字符
front获取第一个字符

 

int main()
{string s1("hello world");cout << s1.at(1) << endl;cout << s1[1] << endl;cout << s1.front() << endl;cout << s1.back() << endl;s1[1] = '8';cout << s1 << endl;s1.at(1) = '0';cout << s1 << endl;return 0;
}

  运行结果:

3.迭代器(iterator)

迭代器可用来遍历和访问容器

迭代器有四种

iterator

const_iterator

reverse_iterator

const_reverse_iterator

begin返回第一个位置的迭代器(正向)
end返回最后一个位置的下一个位置的迭代器(正向)
rbegin返回最后一个位置的迭代器(反向)
rend返回第一个位置的迭代器(反向)
cbegin返回(const)第一个位置的迭代器(正向)
cend返回(const)最后一个位置的下一个位置的迭代器(正向)
crbegin返回(const)最后一个位置的迭代器(反向)
crend返回(const)第一个位置的迭代器(反向)

 

3.1 begin 和 end

迭代器实现遍历

方法一:

int main()
{string s1("hello world");string::iterator t = s1.begin();while (t != s1.end()){cout << *t;t++;}return 0;
}

运行结果:

方法二:

C++11支持

int main()
{string s1("hello world");for (auto c : s1){cout << c;}return 0;
}

运行结果:

迭代器实现修改

int main()
{string s1("hello world");string s2("hello world");string::iterator t = s2.begin();while (t != s2.end()){(*t)++;cout << *t;t++;}cout << endl;for (auto& c : s1)//要加引用{c += 1;cout << c;}return 0;
}

运行结果:

3.2 rbegin 和 rend

反向遍历string

int main()
{string s("hello world");string::reverse_iterator t = s.rbegin();while (t != s.rend()){cout << *t;*t++;}return 0;
}

注意:尽管是反向迭代器,仍然是 *t++。

4.容器

size返回string的大小,与length无区别
length返回string的长度,与size无区别
max_size返回string可容纳的最大长度
resize

重新开辟空间

capacity返回当前string的容量
reserve可以提前开辟空间,扩大空间,可最小缩小空间到当前字符串的大小。
clear清除所有字符,但不修改容量
empty判断字符串是否为空

 

5.修改

operator+=在字符串后面添加字符或者字符串
append在字符串后面添加字符或者字符串
push_back将字符附加到字符串
assign将一个字符串分配给此字符串,覆盖赋值,会覆盖原先的字符串。
insert插入字符串
erase从字符串中删除字符串
replace替换字符串的一部分
swap交换字符串值
pop_back删除最后一个字符

 

5.1 append

int main()
{string s("hello world");s.append("6");cout << s << endl;s.append("999");cout << s << endl;return 0;
}

运行结果:

5.2 assign

int main()
{string s("hello world");s.assign("231");cout << s << endl;return 0;
}

运行结果:

5.3 insert

在pos之前位置插入字符串

实现头插:

int main()
{string s("hello world");s.insert(0, "hello mike");cout << s << endl;return 0;
}

运行结果:

5.4 erase

实现头删:
 

int main()
{string s("hello world");s.erase(0, 1);//在第0个位置删除1个字符cout << s << endl;return 0;
}

运行结果:

5.5 replace

int main()
{string s("hello world");s.replace(5, 1, "##");//从第5个开始的1个长度,替换为##cout << s << endl;return 0;
}

运行结果:

5.字符串操作

5.1 find

若成功找到,则返回所在字符串中的第一个位置,若没有找到,则返回string::npos

int main()
{string s("hello world");cout << s.find(" ") << endl;return 0;
}

运行结果:

int main()
{string s("hello world");if (s.find("asd") == string::npos){cout << "string::npos" << endl;}return 0;
}

运行结果:

6.getline函数

6.1 第一种声明方式是传递三个参数。

istream& getline( istream& is, string& strs, char delim );

is:istream类的对象,定义从哪里读取输入流。

strs:存储字符串的string字符串。

delim:规定遇到什么字符停止。

int main()
{string s;getline(cin, s, '*');cout << s << endl;return 0;
}

 遇到*时停止输入。

运行结果:

 

6.2 第二种声明方式是传递两个参数

istream& getline( istream& is, string& str );

is:istream类的对象,定义从哪里读取输入流。

strs:存储字符串的string字符串。

两个参数时,默认遇到换行符时停止。


本篇完

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 低代码: 技术实现概述
  • 部署k8s+conatinerd环境
  • 【学习笔记】后缀自动机(SAM)
  • 【MySQL】索引——索引的引入、认识磁盘、磁盘的组成、扇区、磁盘访问、磁盘和MySQL交互、索引的概念
  • 微信小程序 - 自定义计数器 - 优化(键盘输入校验)
  • 在VScode中导入conda环境的记录【原创】
  • 数据保险箱:SQL Server数据库备份加密的高级策略
  • 【无所从来,亦无所去】纪念去世的奶奶和外公「纪念网页」
  • 探索Python文档自动化的奥秘:MkDocs的神奇之旅
  • postgresql 字符串 替换
  • 【Linux】文件变身大作战:Linux下的文件重命名艺术
  • Spark wordcount实验
  • 探索PyCharm的C/C++支持:一站式配置指南
  • Python | Leetcode Python题解之第319题灯泡开关
  • C++ vector的基本使用(待补全)
  • JS 中的深拷贝与浅拷贝
  • EOS是什么
  • JS变量作用域
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • react-native 安卓真机环境搭建
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 从零开始学习部署
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 构建工具 - 收藏集 - 掘金
  • 基于web的全景—— Pannellum小试
  • 七牛云假注销小指南
  • 前端js -- this指向总结。
  • 正则表达式
  • 7行Python代码的人脸识别
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • #NOIP 2014# day.1 T2 联合权值
  • #传输# #传输数据判断#
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (回溯) LeetCode 77. 组合
  • (全注解开发)学习Spring-MVC的第三天
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (算法)硬币问题
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)认识微服务
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转载)(官方)UE4--图像编程----着色器开发
  • ./configure、make、make install 命令
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .net6 webapi log4net完整配置使用流程
  • .NET处理HTTP请求
  • .NET框架设计—常被忽视的C#设计技巧
  • .net通过类组装数据转换为json并且传递给对方接口
  • @NestedConfigurationProperty 注解用法
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [000-01-018].第3节:Linux环境下ElasticSearch环境搭建
  • [2024-06]-[大模型]-[Ollama]- WebUI
  • [2544]最短路 (两种算法)(HDU)