C++中string类的常用函数

文章目录

  • 默认成员函数
    • 常见构造函数(constructor)
  • string类的容量操作
    • size()
    • empty()
    • capacity()
    • reserve()
    • clear()
    • resize()
  • string类对象的访问及遍历操作
    • 重载 [ ]
    • begin()
    • end()
    • begin() + end() 遍历字符串
    • rbegin()
    • rend()
    • rbegin() + rend()反向遍历字符串
    • C++11范围for
  • string类对象修改操作
    • operator+=
  • 字符串操作
    • c_str()
    • find
    • rfind()
    • substr()
    • 常量成员
    • npos
    • 非成员函数重载
    • getline()

引言:在C语言中对于字符串的一些操作,例如在字符串末尾增加字符,对字符串拷贝等,我们可以通过调用库中函数来完成这些操作,在C++中,我们把这些常规操作封装成了string类,可以通过类对象直接调用这些函数,使得更加符合了面向对象的思想。

默认成员函数

C++中string类的常用函数_第1张图片

常见构造函数(constructor)

C++中string类的常用函数_第2张图片

int main()
{
	string s1;//无参构造初始化为空字符串
	string s2("abcdefg");//用C-string来构造string类对象
	string s3(s2);//拷贝构造函数
	string s4(5, '*');//string类对象中包含n个字符c
	return 0;
}

string类的容量操作

C++中string类的常用函数_第3张图片

size()

作用:返回字符串的有效字符长度

	string s6 = "abcdefg";
	int size = s6.size();//返回7

empty()

作用:检测字符串是否为空串,是返回true,否则返回false

	string s7;
	string s8 = "abcdef";
	s7.empty();//返回true
	s8.empty();//返回false

capacity()

作用:返回空间总大小

在VS2019中默认给string对象开辟15字节,并且以原容量的二倍进行扩容

	string s;
	cout << s.capacity() << endl;//输出15
	s += "abcdefghijklmnop";
	cout << s.capacity() << endl;//输出31

在vim中有多少字符空间就有多大

	string s;
	cout << s.capacity() << endl;//输出0
	s += "abcdefghijklmnop";
	cout << s.capacity() << endl;//输出16

reserve()

作用:为字符串预留空间
注意区分:reserve是保留,预留 reverse是翻转

在VS2019中

	string s1 = "abc";
	cout << s1.capacity() << endl;//输出15
	s1.reserve(100);
	cout << s1.capacity() << endl;//输出111

在vim中

	string s1 = "abc";
	cout << s1.capacity() << endl;//输出3
	s1.reserve(100);
	cout << s1.capacity() << endl;//输出100

clear()

C++中string类的常用函数_第4张图片

作用:清空有效字符
注意:clear()函数没有返回值
VS2019中

	string s9 = "abcdef";
	cout << s9.capacity() << endl;//返回15
	cout<<s9.empty()<<endl;//返回false
	s9.clear();//清空字符串
	cout << s9.capacity() << endl;//返回15
	cout << s9.empty() << endl;//返回true

vim中

	string s9 = "abcdef";
	cout << s9.capacity() << endl;//返回6
	cout<<s9.empty()<<endl;//返回false
	s9.clear();//清空字符串
	cout << s9.capacity() << endl;//返回6
	cout << s9.empty() << endl;//返回true

可以看到在清除字符后字符串的原有容量并不会减小,size会变为0

resize()

作用:调整大小,将有效字符的个数改成n个,如果有多出的空间用字符c填充
C++中string类的常用函数_第5张图片

	string s3 = "abcdefg";
	s3.resize(4);//缩小
	cout << s3 << endl;//输出abcde
	string s4 = "abcde";
	s4.resize(10, 'd');//扩大
	cout << s4 << endl;//输出abcdeddddd//多出来5个字节用字符‘d’来进行填充
	//扩大时默认使用0来进行填充

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

在这里插入图片描述
C++中string类的常用函数_第6张图片

重载 [ ]

	string s4 = "abcdefg";
	for (int i = 0; i < s4.size(); i++)
	{
		cout << s4[i] << " ";
	}
	cout << endl;

begin()

C++中string类的常用函数_第7张图片
作用:返回一个指向这个字符串首字符的迭代器

end()

C++中string类的常用函数_第8张图片
作用:返回一个指向这个字符串末尾后的字符的迭代器

begin() + end() 遍历字符串

	string s5 = "abcdefg";
	string::iterator it;
	for (it = s5.begin(); it != s5.end(); it++)
	{
		cout << *it << " ";
	}//输出 a b c d e f g
	cout << endl;

rbegin()

C++中string类的常用函数_第9张图片
作用:返回字符串最后一个字符的位置

rend()

C++中string类的常用函数_第10张图片
作用:返回字符串首字符的前一个位置

rbegin() + rend()反向遍历字符串

string s6 = "abcdefg";
	string::reverse_iterator rit;//反向迭代器
	for (rit = s6.rbegin(); rit != s6.rend(); rit++)
	{
		cout << *rit << " ";
	}//输出g f e d c b a
	cout << endl;

C++11范围for

	string s7 = "abcdefg";
	for (const auto& e : s7)
	{
		cout << e << " ";
	}

string类对象修改操作

C++中string类的常用函数_第11张图片

operator+=

作用:在字符串后面追加字符

	string s1 = "abcdefg";
	s1 += "fff";
	cout << s1 << endl; //输出abcdefgfff
	string s2;
	s2 = s1 + "hhh";
	cout << s2 << endl;//输出abcdefgfffhhh
	string s3 = s1 + s2;
	cout << s3 <<end;//输出abcdefgfffabcdefgfffhhh

字符串操作

C++中string类的常用函数_第12张图片

c_str()

C++中string类的常用函数_第13张图片

作用:把const string类型转换成const char类型,并返回const char*的指针

	const char* ptr;
	string s7 = "abcdefg";
	ptr = s7.c_str();
	cout << ptr << endl;//输出abcdefg
	s7 = "aaaaaaaa";//改变原来的字符串
	cout << ptr << endl;//输出aaaaaaaa

由此可见返回的指针和字符串指针,这两个指针是指向的同一个地址

find

C++中string类的常用函数_第14张图片
作用:从pos位置开始向末尾位置查找字符串或者字符,并返回对应的下标,如果没找到则返回npos.
参数s或c表示要查找的字符串或者字符
pos指在字符串中开始查找的起始位置
n表示要查找的字符串长度

	string s1 = "abcdeeeeefg";
	cout << s1.find('a');//输出0
	cout << s1.find("cde");//输出2
	cout << s1.find("cde", 3);
	//输出npos,从下标为3的位置开始找,没找到返回npos = 4294967295

rfind()

C++中string类的常用函数_第15张图片
作用:从pos位置开始向0位置查找字符串或者字符,并返回对应的下标,如果没找到则返回npos

	string s2 = "abcdeeeeefg";
	cout << s2.rfind('e') << endl;//输出8----rfind()是倒着查找的
	cout << s2.rfind("cde") << endl;//输出2
	cout << s2.rfind('m') << endl;//输出npos = 4294967295

substr()

C++中string类的常用函数_第16张图片
作用:在字符串中从pos位置开始截取长度为len的子串

	string s3 = "abcdefgh";
	string s4 = s3.substr(2, 5);
	cout << s4 << endl;//输出cdefg
	string s5 = s3.substr(2);
	cout << s5 << endl;//输出cdefgh

常量成员

npos

在这里插入图片描述
npos是静态成员常量,值为static const size_t npos = -1;
-1对应的无符号整数为4294967295

非成员函数重载

C++中string类的常用函数_第17张图片

getline()

C++中string类的常用函数_第18张图片
作用:获取一行字符串,包括空格

	string s6;
	getline(cin, s6);//输入a b  c gg----g后面也输入了两个空格
	cout << s6 << endl;//输出a b  c gg

C++中string类的常用函数_第19张图片

你可能感兴趣的:(C++,c++)