C++中的string类

前言

C语言中字符串是以'\0'结尾的字符的集合,为了方便操作,C标准库中提供了一些str系列的库函数,接下来我们学习string类。

1. 标准库中的string类

1.1 string类

在使用string类的时候,必须包含#include头文件以及using namespace std;

1.2 auto 和范围for

auto关键词

auto可以自动匹配变量的类型,但有几个点需要注意:

  1. 用auto声明指针类型时,用auto和auto*没有区别。auto声明引用类型时则必须加&

  2. 当在同一行声明多个类型时,这些变量必须是同一种类型,否则编译器会报错,因为编译器实际只对第一个类型进行推导

  3. auto 不能作为函数的参数,但是可以作为返回值,但是需要谨慎使用

  4. auto不能直接用来声明数组

    #include<iostream>
    using namespace std;
    int func1(auto a)//会报错,不能做参数
    {

    }
    auto func2()//可以做返回值,但是需要谨慎使用
    {
    return 3;
    }
    int main()
    {
    auto a;//报错,必须有初始化
    auto b = 3,c = 3.2;//报错,必须为同一类型
    auto array[] = {4,5,6};//报错,不能作为数组
    return 0;
    }

auto 的便利之处:

复制代码
//std::map<std::string, std::string>::iterator it = dict.begin();
auto it = dict.begin();

范围for

对于一个有限的集合,C++11中引入了给予范围for循环。for循环后的括号由冒号:分为两部分,第一部分是范围for内用于迭代的变量,第二部分则表示被迭代的范围。

复制代码
int main()
{
char arr[] = "ajiang";
for(auto ch:arr)
{
 cout<<ch<<' ';
}
return 0;
}

范围for可用于数组和容器对象上进行遍历

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

1.3 string类的常用接口说明

1.3.1. string类对象的常见构造

复制代码
void test()
{
 string s1;//默认构造s1
 string s2("ajiang");用字符串构造s2
 string (s2);拷贝构造s3
}

1.3.2. string类对象的容量操作

讲解:

  1. size和length底层实现完全相同,引入size()是为了和其他容器的接口保持一致,一般情况基本上都用size;

  2. clear只是将string中的有效字符清空,不改变空间大小

resize(size_ t ,n)和resize(size_t n ,char c)是将有效字符的个数改变到n个。不同的是,当字符个数增多的时候,resize(n),用0来填充多出的空间,而resize(n,c)则是用字符c来填充。

注意:当resize改变元素个数时,如果元素增多,可能会扩容,如果元素减少,则底层空间大小不变

reserve(size_t ) 是为string预留空间,不改变有效元素个数,当reserve的参数小于空间总大小时,reserve不会改变容量大小。

1.3.3. string类对象的访问及遍历操作

operator[]实例:

复制代码
void test()
{
 string s1("ajiang");
 cout<<s1[2]<<endl;
}

1.3.4 string类对象的修改操作

讲解:

+=是最常用的,可以+=字符,字符串,也可以+=一个字符指针指向的字符串。

其底层是通过append和push_back实现的。

c_str()返回一个指向数组的指针。可以用来输出字符串。

find可以查找一个字符串,也可以查找单个字符,查找到就返回该字符或字符串的下标,查不到就返回npos.

1.3.5 string类非成员函数

相关推荐
雷达学弱狗22 分钟前
链式法则解释上游梯度应用
开发语言·前端·javascript
小清兔4 小时前
c#基础知识
开发语言·数据库·学习·unity·c#·游戏引擎·.net
奇某人5 小时前
【语法】【C+V】本身常用图表类型用法快查【CSDN不支持,VSCODE可用】
开发语言·vscode·markdown·mermaid
做一位快乐的码农5 小时前
php程序设计之基于PHP的手工艺品销售网站/基于php在线销售系统/基于php在线购物商城系统
开发语言·php
@珍惜一生@6 小时前
Qt开源库
开发语言·qt·开源
Slaughter信仰6 小时前
深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第四章知识点问答补充及重新排版
java·开发语言·jvm
心灵宝贝6 小时前
Mac用户安装JDK 22完整流程(Intel版dmg文件安装指南附安装包下载)
java·开发语言·macos
secondyoung6 小时前
一文丝滑使用Markdown:从写作、绘图到转换为Word与PPT
开发语言·vscode·编辑器·powerpoint·markdown·visual studio·mermaid
Incredibuild7 小时前
DevSecOps 集成 CI/CD Pipeline:实用指南
c++·ci/cd·devsecops
雨枪幻。8 小时前
spring boot开发:一些基础知识
开发语言·前端·javascript