前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++初阶】string 类的认识与学习

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

作者头像
aosei
发布2024-01-23 14:33:24
1220
发布2024-01-23 14:33:24
举报
文章被收录于专栏:csdn-nagiY

在学习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类对象的构造

可以看到,库里一共有7种构造方式,但我们常用的是(1),(2),(4),其它并不怎么用,如果想要了解的话,可以自行查看文档。

代码语言:javascript
复制
int main()
{
    string s1;  //不初始化(1)
    string s2("hello world");  //常量字符串初始化 (2)
    string s3(s2);   //string 类型初始化  (4)

    return  0;
}

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

库里重载了 [] 运算符,这就允许我们可以像C语言中一样,用 [] 加下标的方式访问string类对象。

string类的遍历有很多种方法:

1.像C语言中数组的遍历方式

代码语言:javascript
复制
    string s("hello world");
    for (int i = 0; i < s.size(); i++)
    {
        cout << s[i] << endl;
    }

2.范围for

代码语言:javascript
复制
    for (auto ch : s)
    {
        cout << ch<< endl;
    }

注意范围for只能正向遍历

3.迭代器 iterator

代码语言:javascript
复制
    std::string::iterator it = s.begin();
    while (it != s.end())
    {
        cout << *it << endl;
        it++;
    }

迭代器是封装在string类里面的,所以要以上述方式使用。

迭代器是像指针一样的类型,但并不完全是指针,它提供了一种统一的方式修改和访问容器的数据,不像前两种方式需要是数组,且范围for是用迭代器实现的。

迭代器有很多接口:

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


四.string类对象的容量操作

size和lengh的功能差不多,但还是推荐用size; resize可以设置size,如果你设置的比你实际的有效数据小,则多的会被舍弃

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

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


五.string类对象的修改操作

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

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

下面再介绍几个常用的:

find与rfind

find可以在一个字符串中从pos处开始寻找字符或是字符串,并返回第一个与之匹配的下标 ,如果没有找到,则返回npos,npos的值其实是-1; rfind顾名思义,就是反向查找,功能和find还是一样的。

substr

截取从 pos 到 len 的子串

例:分离一个网址的协议,域名和资源

代码语言:javascript
复制
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

返回string类中字符串的地址,因为string类既包括了字符串,也包括了size,capacity这些变量,有时为了更好的配合C语言,会使用这个函数。

请看例题:

代码语言:javascript
复制
//以下代码的运行结果是什么?
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

获取一行字符串(包括空格) 这个就弥补了cin>> 的不足,cin>> 是遇到空格就停止读取了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.string 类是什么
  • 二.string类对象的构造
  • 三.string类对象的访问及遍历操作
  • 四.string类对象的容量操作
  • 五.string类对象的修改操作
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档