【C++初阶】string 类的认识与学习 ゝ一世哀愁。 2024-04-22 12:11 75阅读 0赞 > ![35ba644c47a446c987619bb756c68cb6.gif][] > > **在学习string类之前,先在这里推荐2个好用的网站,可以用来查阅C++的相关知识** > > [https://cplusplus.com][https_cplusplus.com] > > [https://en.cppreference.com/w/][https_en.cppreference.com_w] > > 上面的是非官方的,下面的官方的,但是个人感觉还是上面的好用。 ## 一.string 类是什么 ## > 简单来说,**string 是C++中用来管理字符串的类。** > > 他有很多接口,大致分为: > > 1.string类对象的构造 > > 2.string类对象的访问及遍历操作 > > 3.string类对象的容量操作 > > 4. string类对象的修改操作 > > 5.string类非成员函数 > > 下面开始介绍。 -------------------- ## 二.string类对象的构造 ## ![1719aa9d3de548f19da21207fd5ebffe.png][] > 可以看到,库里一共有7种构造方式,但我们常用的是**(1),(2),(4)**,其它并不怎么用,如果想要了解的话,可以自行查看文档。 > > int main() > { > string s1; //不初始化(1) > string s2("hello world"); //常量字符串初始化 (2) > string s3(s2); //string 类型初始化 (4) > > return 0; > } -------------------- ## 三.string类对象的访问及遍历操作 ## > 库里重载了 \[\] 运算符,这就允许我们可以像C语言中一样,用 **\[\] 加下标**的方式访问string类对象。 > string类的遍历有很多种方法: > > 1.像C语言中**数组的遍历方式** > > string s("hello world"); > for (int i = 0; i < s.size(); i++) > { > cout << s[i] << endl; > } > > 2.**范围for** > > for (auto ch : s) > { > cout << ch<< endl; > } > > 注意**范围for只能正向遍历**; > > 3.**迭代器 iterator** > > std::string::iterator it = s.begin(); > while (it != s.end()) > { > cout << *it << endl; > it++; > } > > 迭代器是封装在string类里面的,所以要以上述方式使用。 > > **迭代器是像指针一样的类型,但并不完全是指针,它提供了一种统一的方式修改和访问容器的数据**,不像前两种方式需要是数组,且范围for是用迭代器实现的。 > > 迭代器有很多接口: > > ![06438b50bb0c48cdb169c489f09ef9a1.png][] > > **rbegin和rend是反向迭代器的接口**,后面的4个并不常用,就不做过多介绍了 。 -------------------- ## 四.string类对象的容量操作 ## ![2074cd00af634fc7b79c4c9af23c1aa3.png][] > size和lengh的功能差不多,但还是推荐用size; > > **resize可以设置size,如果你设置的比你实际的有效数据小,则多的会被舍弃**: > > ![5dea9668fe0046bab601683f391a6b68.png][] > > **reserve可以设置capacity,但他实际设置的空间,比你预想的要大**: > > ![b5f71036ba634020a6c63157e9e829c0.png][] > > 如果想要用reserve实现缩容的操作,则需要**先清空有效数据,否则无效**: > > ![ebfd71c4c1a84ec0a6da4eb6f2767c2b.png][] -------------------- ## 五.string类对象的修改操作 ## ![a27b515c8f6b4661a9da2564799643e4.png][] > 库里提供很多修改string类对象的接口,但我们最常用,用的最爽的还是 **+=** ,这个清楚明了,你不用担心它的容量问题,它会自动扩容的 > > ![983ea61fe5ff40dfbcd01753aa2ad887.png][] > > 它支持**string类对象,常量字符串,字符**。 ![f2a13e1716934cb092bc72a0005eebf1.png][] > 下面再介绍几个常用的: > ### find与rfind ### > > ![c484162773404fc1812e70723deaee2d.png][] > > **find可以在一个字符串中从pos处开始寻找字符或是字符串,并返回第一个与之匹配的下标 ,如果没有找到,则返回npos,npos的值其实是-1**; > > rfind顾名思义,就是**反向查找**,功能和find还是一样的。 > ### substr ### > > ![514b907739a34ca38570a31f35f89026.png][] > > **截取从 pos 到 len 的子串** 例:分离一个网址的协议,域名和资源 int main() { string ur = "https://tsunagarujp.bunka.go.jp/level02/b13"; size_t pos1= ur.find("://"); string protocol; //协议 string domain; //域名 string uri; //资源 protocol = ur.substr(0, pos1); cout << protocol << endl; size_t pos2 = ur.find("/",pos1+3); domain = ur.substr(pos1 + 3, pos2 - pos1 - 3); cout << domain << endl; uri = ur.substr(pos2 + 1); cout << uri << endl; return 0; } > ### c\_str ### > > ![5ea3ff56cbc04cc0b2737a7fb443326a.png][] > > **返回string类中字符串的地址**,因为string类既包括了字符串,也包括了size,capacity这些变量,有时为了更好的配合C语言,会使用这个函数。 请看例题: //以下代码的运行结果是什么? int main() { string a="hello world"; string b=a; if (a.c_str()==b.c_str()) cout<<"true"<<endl; else cout<<"false"<<endl; string c=b; c=""; if (a.c_str()==b.c_str()) cout<<"true"<<endl; else cout<<"false"<<endl; a=""; if (a.c_str()==b.c_str()) cout<<"true"<<endl; else cout<<"false"<<endl; return 0; } 答案:false false false > ### getline ### > > ![621771bcac8f45538b57456109afe350.png][] > > **获取一行字符串(包括空格)** > > 这个就弥补了cin>> 的不足,cin>> 是遇到空格就停止读取了。 -------------------- > **??本篇文章到此就结束了, 若有错误或是建议的话,欢迎小伙伴们指出;?️?** > > **??希望小伙伴们能支持支持博主啊,你们的支持对我很重要哦;??** > > **??谢谢你的阅读。??** [35ba644c47a446c987619bb756c68cb6.gif]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/83f24fe0ce8441728ece4544de948c6f.gif [https_cplusplus.com]: https://cplusplus.com [https_en.cppreference.com_w]: https://en.cppreference.com/w/ [1719aa9d3de548f19da21207fd5ebffe.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/6246183a40c74f9d862b08162bc4c341.png [06438b50bb0c48cdb169c489f09ef9a1.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/f6dec75dcace413dbc460d2134f79fda.png [2074cd00af634fc7b79c4c9af23c1aa3.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/d17edf03582d49bdb8e735913d7f9ab4.png [5dea9668fe0046bab601683f391a6b68.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/9f4cce6db3134e60b7bea4e3cee7c26e.png [b5f71036ba634020a6c63157e9e829c0.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/3fb8ea8d0d10481fa59f9f6715c1161f.png [ebfd71c4c1a84ec0a6da4eb6f2767c2b.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/e838724d116f43678d641d97722c7493.png [a27b515c8f6b4661a9da2564799643e4.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/6748bf557ada4f2084a5df03cb994ec2.png [983ea61fe5ff40dfbcd01753aa2ad887.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/5159a8ebb54e422fbc9e2de7d67857e6.png [f2a13e1716934cb092bc72a0005eebf1.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/5957e7ea43db48c7a787d8cd677c2502.png [c484162773404fc1812e70723deaee2d.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/73c5723e727b475ba575d2986df42bb3.png [514b907739a34ca38570a31f35f89026.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/fc9b7370d4b942328cde480e86fcfd8a.png [5ea3ff56cbc04cc0b2737a7fb443326a.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/30331a3385bc42459f82c3ea6c25cf3d.png [621771bcac8f45538b57456109afe350.png]: https://image.dandelioncloud.cn/pgy_files/images/2024/04/22/431ca391d1a34aefb8b325e839838078.png
相关 【C++初阶】函数模板与类模板 文章目录 引言.泛型编程 一.函数模板 1.基本使用 2.拔高训练 2-1自动推演实例化和显式实例化 忘是亡心i/ 2024年04月01日 15:11/ 0 赞/ 94 阅读
相关 【C++初阶】STL-string的使用 文章目录 一.string初识 1.STL简介 a.STL的组成 b.STL和string的关系 ╰+哭是因爲堅強的太久メ/ 2024年03月31日 14:23/ 0 赞/ 77 阅读
相关 【C++初阶】:类与对象(中) 类与对象 类的6个默认函数 一.构造函数 1.简单使用 2.构造函数重载 3.默认构造函数 二.析构函数 小咪咪/ 2024年03月23日 16:19/ 0 赞/ 31 阅读
相关 【C++初阶】:类与对象(上) 类与对象 一.面向对象的初步认识 二.初步认识类 三.类的权限 四.类的声明和定义 五.封装 六.类的实例化 七.类的大小 柔情只为你懂/ 2024年03月23日 15:54/ 0 赞/ 48 阅读
相关 【C++初阶】:类与对象(下) 类与对象 一.再谈构造函数 1.初始化列表(构造函数的一部分) 2.explicit关键字 二.static成员 三.友元 爱被打了一巴掌/ 2024年03月22日 14:37/ 0 赞/ 62 阅读
相关 【C++初阶】:string类 string 一string的基本用法 二.迭代器 1.基本使用 2.语法糖 3.反向迭代器 4.con 缺乏、安全感/ 2024年03月17日 09:59/ 0 赞/ 55 阅读
相关 认识计算机-JavaEE初阶 文章目录 一、计算机的发展史 二、冯诺依曼体系(Von Neumann Architecture) 三、CPU基本工作流程 3.1 算术逻辑 Dear 丶/ 2024年02月19日 10:01/ 0 赞/ 68 阅读
还没有评论,来说两句吧...