【C++】string类基础知识

一. 有关string类的几点说明

  • string是表示字符串的字符串类
  • 在使用string类时,必须包含 #include< string > 头文件以及using namespace std;

二. string类的常用接口

1. string类对象的常见构造

1.1 string()

说明:构造一个空的字符串,里面没有字符

在这里插入图片描述

1.2 string(const char* s)

说明:用C-string来构造string类对象

在这里插入图片描述

1.3 string(const string& s)

说明:拷贝构造string类对象

在这里插入图片描述

1.4 string(size_t n, char c)

说明:string类对象中包含n个字符c

在这里插入图片描述

2. string类对象的容量操作

2.1 size

原型:size_t size() const;
说明:返回字符串有效字符长度

在这里插入图片描述

2.2 resize

原型:
void resize (size_t n);
void resize (size_t n, char c);
说明:将有效字符的个数改成n个,多出的有效空间用字符c填充,如果没有传字符c,那就默认是字符’ \0 ’

  • resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。

在这里插入图片描述

2.3 capacity

原型:size_t capacity() const;
说明:返回空间总大小

在这里插入图片描述

2.4 reserve

原型:void reserve (size_t n = 0);
说明:显示地给字符串对象扩容

  • 对string操作时,如果能够大概预估到放多少字符,可以先通过reserve把空间预留好。
  • reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小

在这里插入图片描述

2.5 empty

原型:bool empty() const;
说明:检测字符串是否为空串,是返回true,否则返回false

在这里插入图片描述

2.6 clear

原型:void clear();
说明:清空有效字符

  • clear()只是将string中有效字符清空,不改变底层空间大小

在这里插入图片描述

3. string类对象的修改操作

3.1 push_back

原型:void push_back (char c);
说明:在字符串后尾插字符c

  • 注意只能尾插字符不能尾插字符串

在这里插入图片描述

3.2 append

原型:
string& append (const char* s);
string& append (const string& str);
说明:在字符串后追加一个字符串

在这里插入图片描述

3.3 operator+=

原型:
string& operator+= (char c);
string& operator+= (const char* s);
string& operator+= (const string& str);
说明:在字符串后追加字符或者字符串

在这里插入图片描述

3.4 c_str

原型:const char* c_str() const;
说明:返回C格式字符串,只可读不可写

在这里插入图片描述

3.5 find + npos

原型:size_t find (char c, size_t pos = 0) const;
说明:从字符串pos下标开始往后找字符c,返回该字符在字符串中的下标

  • 下标是从0开始的
  • 如果不指定从哪个下标开始找,pos根据它的缺省值从0下标开始找
  • 如果找不到对应字符的话,就返回npos,npos是string里面的一个静态成员变量 static const size_t npos = -1;
    在这里插入图片描述
3.6 rfind

原型:size_t rfind (char c, size_t pos = npos) const;
说明:从字符串pos下标开始往前找字符c,返回该字符在字符串中的下标

  • 和find一样,不过是从后往前找

在这里插入图片描述

3.7 substr

原型:string substr (size_t pos = 0, size_t len = npos) const;
说明:在str中从pos下标开始,截取n个字符,然后将其返回

  • 如果截取的字符超过了该位置后面的有效字符个数,那也只能返回后面的有效字符。
  • 对应形参的缺省值是从0下标开始,截取npos个字符,也就是字符串的有效字符。

在这里插入图片描述

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

4.1 operator[]

原型:
char& operator[] (size_t pos); (string类对象调用)
const char& operator[] (size_t pos) const; (const string类对象调用)
说明:
返回pos位置的字符

void test()
{
	string s("hello");
	// [] + 下标
	// 读
	for (size_t i = 0; i < s.size(); i++)
	{
		cout << s[i] << endl;
	}

	//写
	for (size_t i = 0; i < s.size(); i++)
	{
		s[i] += 1;
	}
}
4.2 迭代器

说明:这里迭代器的用法跟指针类似,都是迭代器不一定是指针

void test()
{
	string s("hello");
	// 迭代器
	// 读 
	string::iterator it = s.begin(); // begin获取一个字符的迭代器
	while (it != s.end())            // end获取最后一个字符下一个位置的迭代器
	{
		cout << *it;
		it++;
	}
	cout << endl;

	// 写
	it = s.begin();
	while (it != s.end())
	{
		*it += 1;
		it++;
	}
}
4.3 C++11范围for

说明:范围for的底层也是迭代器

void test()
{
	string s("hello");
	// 范围for
	// 读
	for (auto e : s)
	{
		cout << e << endl;
	}

	//写
	for (auto& e : s)
	{
		e += 1;
	}
}

三. 从外部输入字符串

1. cin输入

输入规律:不接收空格/tab/换行,从外部输入换行时算输入完毕。
在这里插入图片描述

2. getline输入

可以接收带有空格/tab/换行的字符串

  • 原型一:istream& getline (istream& is, string& str);

接收规律:可以接收空格/tab/换行,外部输入换行算输入缓冲区结束。

在这里插入图片描述

  • 原型二:istream& getline (istream& is, string& str, char delim);

接收规律:可以接收空格/tab/换行,外部输入我们显示定义的字符算输入缓冲区结束。

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值