【C++初阶】string 类的认识与学习

这篇具有很好参考价值的文章主要介绍了【C++初阶】string 类的认识与学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【C++初阶】string 类的认识与学习

 

在学习string类之前,先在这里推荐2个好用的网站,可以用来查阅C++的相关知识

https://cplusplus.com

https://en.cppreference.com/w/

上面的是非官方的,下面的官方的,但是个人感觉还是上面的好用。

一.string 类是什么

简单来说,string 是C++中用来管理字符串的类。

他有很多接口,大致分为:

1.string类对象的构造

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

3.string类对象的容量操作

4. string类对象的修改操作

5.string类非成员函数

下面开始介绍。


二.string类对象的构造

【C++初阶】string 类的认识与学习

可以看到,库里一共有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是用迭代器实现的。

迭代器有很多接口:

【C++初阶】string 类的认识与学习

rbegin和rend是反向迭代器的接口,后面的4个并不常用,就不做过多介绍了 。


四.string类对象的容量操作

【C++初阶】string 类的认识与学习

 size和lengh的功能差不多,但还是推荐用size;

resize可以设置size,如果你设置的比你实际的有效数据小,则多的会被舍弃

【C++初阶】string 类的认识与学习

reserve可以设置capacity,但他实际设置的空间,比你预想的要大

【C++初阶】string 类的认识与学习

 如果想要用reserve实现缩容的操作,则需要先清空有效数据,否则无效

【C++初阶】string 类的认识与学习


五.string类对象的修改操作

【C++初阶】string 类的认识与学习

库里提供很多修改string类对象的接口,但我们最常用,用的最爽的还是 += ,这个清楚明了,你不用担心它的容量问题,它会自动扩容的

【C++初阶】string 类的认识与学习

 它支持string类对象,常量字符串,字符

【C++初阶】string 类的认识与学习

 下面再介绍几个常用的:

find与rfind

【C++初阶】string 类的认识与学习

find可以在一个字符串中从pos处开始寻找字符或是字符串,并返回第一个与之匹配的下标 ,如果没有找到,则返回npos,npos的值其实是-1

rfind顾名思义,就是反向查找,功能和find还是一样的。

substr 

【C++初阶】string 类的认识与学习

截取从 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

【C++初阶】string 类的认识与学习

返回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

【C++初阶】string 类的认识与学习

获取一行字符串(包括空格)

这个就弥补了cin>> 的不足,cin>> 是遇到空格就停止读取了。


🐬🤖本篇文章到此就结束了, 若有错误或是建议的话,欢迎小伙伴们指出;🕊️👻

😄😆希望小伙伴们能支持支持博主啊,你们的支持对我很重要哦;🥰🤩

😍😁谢谢你的阅读。😸😼文章来源地址https://www.toymoban.com/news/detail-486288.html

到了这里,关于【C++初阶】string 类的认识与学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C++初阶】第七站:string类的初识(万字详解、细节拉满)

    前言: 📍 本文知识点:string的初识 💨 个人博客: Dream_Chaser~-CSDN博客 🚩本专栏: C++ 目录 一、什么是STL 二、STL的六大组件 三、STL的缺陷 四、为什么学习string类? 五、标准库中的string类 1、string类(了解) 2、string类的常用接口说明(最常用的接口) A. string类对象的常见构

    2024年03月20日
    浏览(34)
  • 【C++初阶】STL之学习string的用法

    STL是C++的标准模板库 ,里面包含了许多 算法和数据结构 ,例如我们熟悉的顺序表、链表、栈和队列以及一些常见的算法等等,编程者想使用这些就可以直接从库中调用,不必再自己造轮子了。 下面为STL内容的一张图: 接下来,我们要学习STL中的string。 string 是C++的一个类模

    2024年02月04日
    浏览(32)
  • C++ 学习 ::【基础篇:16】:C++ 类的基本成员函数:拷贝构造函数(认识、特征、注意点及典型使用场景)及其基本写法与调用

    本系列 C++ 相关文章 仅为笔者学习笔记记录,用自己的理解记录学习!C++ 学习系列将分为三个阶段: 基础篇、STL 篇、高阶数据结构与算法篇 ,相关重点内容如下: 基础篇 : 类与对象 (涉及C++的三大特性等); STL 篇 : 学习使用 C++ 提供的 STL 相关库 ; 高阶数据结构与算

    2024年02月08日
    浏览(35)
  • C++初阶 日期类的实现(下)

    目录 一、输入输出(,)重载的实现 1.1初始版  1.2友元并修改 1.2.1简单介绍下友元 1.2.2修改 1.3重载 二、条件判断操作符的实现 2.1==操作符的实现 2.2!=操作符的实现 2.3操作符的实现 2.4=,=,操作符的实现 三、日期-日期的实现 四、下期预告 前言:C++初阶系列,每一期博主都会使用

    2024年02月04日
    浏览(28)
  • C++初阶 日期类的实现(上)

    目录 一、前置准备 1.1获得每月的天数 1.2获得每年的天数 1.3构造函数,析构函数和拷贝构造函数 二、日期与天数的+,-,+=,-=实现 2.1+=运算符重载 2.2+运算符的实现 2.3-=运算符的实现 2.4-运算符的实现 三、++,--的实现 3.1前置++,后置++的实现 3.2前置--和后置--的实现 四、下期预告

    2024年02月05日
    浏览(29)
  • C++初阶-vector类的模拟实现

    C++ STL中的vector就类似于C语言当中的数组,但是vector又拥有很多数组没有的接口,使用起来更加方便。 相比于STL中的string,vector可以定义不同的数据类型。 迭代器的本质可以暂时看作是指针,模拟实现vector,需要定义三个指针:指向起始位置_start,指向最后一个有效元素的下

    2024年02月04日
    浏览(145)
  • 【c++】string类的使用

    目录 一、标准库中的string类 1、简单介绍string类 2、string类的常用接口注意事项 2.1、string类对象的常用构造 2.2、string类对象的容量操作 2.3、string类对象的访问及遍历操作 2.4、string类对象的修改操作 二、string类的模拟实现         (1)string是表示字符串的字符串类;    

    2024年02月01日
    浏览(62)
  • 【C++初阶】8. STL初阶 + String类

    STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗 数据结构与算法的软件框架 。 原始版本 Alexander Stepanov、Meng Lee 在 惠普实验室 完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播

    2023年04月08日
    浏览(35)
  • C++ String类的基本使用

            放弃时间的人,时间也会放弃他。——莎士比亚 ; 本篇章是关于string类内一些函数的介绍以及使用方法,都是我们编程必须掌握的基础! ​ 全文共7000字左右. 话不多说安全带系好,发车啦 (建议电脑观看) 。 附:红色,部分为重点部分;蓝颜色为需要记忆的

    2024年02月09日
    浏览(30)
  • 【C++】string类的模拟实现

    前言:在上一篇中我们讲到了string类的使用方法,今天我们将进一步的去学习string类,去底层看看它顺带模拟实现部分的内容。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:高质量C++学习 👈 💯代码仓库:卫卫周大胖的学习日记💫 💪关注博主和博主一起学习!一起努

    2024年03月21日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包