C++ 标准库类型 string

写在前面: 我是「虐猫人薛定谔i」,一个不满足于现状,有梦想,有追求的00后
\quad
本博客主要记录和分享自己毕生所学的知识,欢迎关注,第一时间获取更新。
\quad
不忘初心,方得始终。自己的梦想,终有一天会实现!
\quad

❤❤❤❤❤❤❤❤❤❤

淦

概述

    标准库类型string表示可变长的字符序列,使用string类型必须首先包含string头文件。作为标准库的一部分,string定义在命名空间std中。

#include <string>

using std::string;

定义和初始化string对象

在这里插入图片描述

string str1 = "zhangsan" // 拷贝初始化
string str2("zhangsan") // 直接初始化
string str3(3, 'a') // 直接初始化,str3的内容是 aaa

string对象上的操作

在这里插入图片描述

读写string对象

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s;
	cin >> s; // 输入
	cout << s << endl; // 输出
	return 0;
}

在这里插入图片描述

注意: string对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇到下一个空白为止。

使用getline读取一行

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s;
	getline(cin, s); // 读取一行
	cout << s << endl;
	return 0;
}

在这里插入图片描述

getline 函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止(注意换行符也被读进来了),然后把所读取的内容存入那个string对象中去(注意不存换行符)。
getline 只要一遇到换行符就结束读取操作并返回结果,因此,如果输入真的一开始就是换行符,那么所得的结果就是个空string

string的empty和size操作

empty函数:判断string对象是否为空
size函数:返回string对象的长度(即string对象中的字符的个数)

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s;
	getline(cin, s);
	cout << s.empty() << endl; // 判断s是否为空
	cout << s.size() << endl; // 返回s的长度
	cout << s << endl;
	return 0;
}

在这里插入图片描述

注意: 由于size函数返回的是一个无符号整型数,因此切记,如果在表达式中混用了带符号数和无符号数将可能产生意想不到的结果。

比较string对象

在这里插入图片描述

注意: 这些比较运算符会逐个比较string对象中的字符,并且对大小写敏感。

两个string对象相加

两个string对象相加得到一个新的string对象,其内容是把左侧的运算对象与右侧的运算对象串接而成。

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s1 = "Hello ";
	string s2 = "World";
	string s3 = s1 + s2;
	s1 += s2;
	cout << s3 << endl;
	cout << s1 << endl;
	return 0;
}

在这里插入图片描述

字面值和string对象相加

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string s1 = "Hello";
	string s2 = "World";
	string s3 = s1 + ' ' + s2 + '!';
	cout << s3 << endl;
	return 0;
}

在这里插入图片描述

注意: 当把string对象和字符的字面值以及字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少有一个是string。

处理string对象中的字符

在这里插入图片描述
使用基于范围的for循环语句

#include <iostream>
#include <string>

using namespace std;

int main()
{
	string str("My name is zhangsan!!!");
	for (auto c : str)
	{
		cout << c << endl;
	}
	return 0;
}

在这里插入图片描述
使用范围 for 语句改变字符串中的字符
如果要改变string对象中的字符值,必须把循环变量定义成引用类型。

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main()
{
	string str("My name is zhangsan!!!");
	for (auto &c : str)
	{
		c = toupper(c);
		cout << c << endl;
	}
	return 0;
}

在这里插入图片描述
下标运算符
[] :接收一个参数,该参数表示要访问的字符的位置,返回值是该位置上的字符引用。
string 对象的下标从0计起,该下标大于等于0而小于s.size()

构造string的其他方法

在这里插入图片描述

这些构造函数接受一个string或者一个const char *参数,还接受(可选的)指定拷贝多少个字符的参数。当我们传递给它们一个string时,还可以给定一个下标来指出从哪里开始拷贝。

substr 操作

substr 操作返回一个string,它是原始string的一部分或全部的拷贝。我们可以传递给substr一个可选的开始位置和计数值。
在这里插入图片描述

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

int main()
{
	string str("hello world");
	string s1 = str.substr(0, 5);
	cout << s1 << endl;
	string s2 = str.substr(6);
	cout << s2 << endl;
	string s3 = str.substr(6, 11);
	cout << s3 << endl;
	return 0;
}

在这里插入图片描述

改变string的其他方法

string 类型支持顺序容器的赋值运算符以及assign、insert和erase操作

s.insert(s.size(), 5, '!') // 在s的末尾插入5个感叹号
s.erase(s.size() - 5, 5) // 从s的删除最后5个字符

append和replace函数
append函数: 在string末尾进行插入操作
replace函数: 调用erase和insert的一种简写形式

在这里插入图片描述
在这里插入图片描述

string 搜索操作

string类提供了6个不同的搜索函数,每个函数有四个重载版本。

在这里插入图片描述

注意: 搜索(以及其他string操作)是大小写敏感的。当在string中查找子字符串时,要注意大小写。

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

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

在这里插入图片描述

compare函数

除了关系运算符外,标准库string类型还提供了一组compare函数。
根据s是等于、大于还是小于参数指定的字符串,s.compare返回0、正数或负数。
在这里插入图片描述

数值转换

字符串中常常包含表示数值的字符。

注意: string参数中第一个非空白符必须是符合(+或-)或数字。它可以以0x或0X开头来表示十六进制数。对那些将字符串表示形式转换为对应的双精度浮点值。

在这里插入图片描述
C/C++数字和字符串的转换



在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章