【C++】零基础学好string类的各种接口这一篇就够了

string常见构造(初始化)

在使用string类时,必须包含#include头文件以及using namespace std

  1. string()(常用)
  2. string(const char*s)(常用)
  3. string(const string&s)(常用)
  4. string(size_t n, char c)
  5. string (const char*s, size_t n);
  6. string (const string& str, size_t pos, size_t len = npos);
#include <iostream>
#include <string>
using namespace std;
int main()
{
	string s1;                  // 1.构造空的string类对象s1
	string s2("hello world");   // 2.用C格式字符串构造string类对象s2
	string s3(s2);              // 3.拷贝构造s3
	string s4(5, 'h');          // 4.string类对象s4中包含n个字符c
	string s5("hello world", 5);// 5.s5是从这个字符串头开始复制5个字符过去
	string s6(s2, 2, 5);        // 6.s6是从s2中下标2开始复制5个字符过去
	return 0;
}

在这里插入图片描述

能够直接使用cout打印string类,是因为有 流插入<< 和 流提取>> 的运算符重载

如何遍历string

  1. 通过下标遍历
    在这里插入图片描述
    string类运算符重载过 [ ] 所以可以直接像数组一样使用下标访问
int main()
{
	string s("1234");
	for (int i = 0; i < 4; i++)
	{
		cout << s[i] << ' ';
	}
}

在这里插入图片描述

  1. 使用范围for遍历
int main()
{
	string s("1234");
	for (auto& ch : s)
	{
		cout << ch << ' ';
	}
}

在这里插入图片描述

  1. 使用迭代器遍历

迭代器iterator的工作原理行为上类似指针,底层可能是由指针实现的,但不能说他就是指针

int main()
{
	string s("1234");
	string::iterator it = s.begin();
	while (it != s.end())
	{
		cout << *it << ' ';
		it++;
	}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
迭代器遍历的方法是一种通用的方法,在string vector list map等等里面只要支持迭代器,就可以使用迭代器遍历

iterator迭代器

Iterators功能
begin正向初始迭代器(有const形式)
end正向结尾迭代器(有const形式)
rbegin反向初始迭代器(有const形式)
rend反向结尾迭代器(有const形式)
cbegin(C++11)C++11的const正向初始迭代器
cend (C++11)C++11的const正向结尾迭代器
crbegin(C++11)C++11的const反向初始迭代器
crend(C++11)C++11的const反向结尾迭代器

begin与end

在这里插入图片描述

  • 普通形式(可读可写)
int main()
{
	string s("1234");
	string::iterator it = s.begin();
	while (it != s.end())
	{
		cout << *it << ' ';
		it++;
	}
}
  • const形式(可读不可写)
int main()
{
	string s("1234");
	string::const_iterator it = s.begin();
	while (it != s.end())
	{
		cout << *it << ' ';
		it++;
	}
}

在这里插入图片描述

rbegin与rend

反向迭代器,就是从结尾开始,结尾是rbegin,向前遍历,头位置是rend
在这里插入图片描述

在这里插入图片描述

  • 普通形式(可读可写)
int main()
{
	string s("1234");
	string::reverse_iterator it = s.rbegin();
	while (it != s.rend())
	{
		cout << *it << ' ';
		it++;
	}
}

在这里插入图片描述

  • const形式(可读不可写)
int main()
{
	string s("1234");
	string::const_reverse_iterator it = s.rbegin();
	while (it != s.rend())
	{
		cout << *it << ' ';
		it++;
	}
}

在这里插入图片描述
C++11支持的cbegin cend crbegin crend使用方法差不多,它们就是const版本的只能读不能写,只有一个版本
在这里插入图片描述

Capacity容量操作

函数名功能
size返回字符串有效字符长度
length返回字符串有效字符长度
capacity返回开辟的空间大小
max_size返回字符串的最大大小(固定值一般是2^32)
empty判断字符串是否为空串,是返回true,否则返回false
clear清空有效字符(不会改变capacity的大小)
reserve为字符串预留空间,更改容量大小
resize改变字符串大小(长度)
shrink_to_fit(C++11)请求字符串减小其容量以适应其大小

在这里插入图片描述

  • reserve

在这里插入图片描述

  • resize
    在这里插入图片描述
    resize有三种情况:
    1. n<原始长度
      在这里插入图片描述

    2. 原始长度<n<capacity
      在这里插入图片描述

    3. n>capacity
      在这里插入图片描述

  • shrink_to_fit
    它的作用是比如一个字符串开辟了100个字节的空间,但是他可能只需要10个字节存储数据,那么shrink_to_fit的作用就是将容量更改为10个字节,减小原空间的大小去适应需要的空间大小

operator+=(尾插)

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

push_back(尾插)

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

append(尾插)

通过在当前值的末尾附加额外的字符来扩展字符串

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

insert(输入位置插入)

在某一位置插入字符或字符串

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

在这里插入图片描述

erase(选择删除)

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

pop_back(尾删C++11)

删除字符串的最后一个字符,有效地将其长度减少1

在这里插入图片描述

在这里插入图片描述

find(从前往后查找)

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

rfind(从后往前查找)

rfind就是从后向前查找,使用方法与find没啥区别

在这里插入图片描述

在这里插入图片描述

assign(删除自身再替换)

为字符串赋一个新值,替换其当前内容(先删除自己的然后替换成别人的)

在这里插入图片描述

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

replace(选择替换)

用新内容替换字符串中以pos字符开始、跨度为len字符的部分(或在[i1,i2)范围内的部分)

在这里插入图片描述
在这里插入图片描述
第三个与第一个是类似的,第三个是直接传C字符串,第一个是传对象
在这里插入图片描述

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

字符串操作

c_str(获得字符串)

返回一个指向数组的指针,该数组包含以空结束的字符序列(即C-string),表示字符串对象的当前值

在这里插入图片描述
在这里插入图片描述
还可以打印文件:

int main()
{
	string file("Test.cpp");
	FILE* fout = fopen(file.c_str(), "r");
	assert(fout);

	char ch = fgetc(fout);
	while (ch != EOF)
	{
		cout << ch;
		ch = fgetc(fout);
	}
	fclose(fout);
	return 0;
}

在这里插入图片描述

substr(获得原字符串字串)

返回一个新构造的字符串对象,其值初始化为该对象的子字符串的副本

在这里插入图片描述
在这里插入图片描述
思考题:取出文件的后缀名

int main()
{
	string s("Test.cpp");
	size_t pos = s.rfind('.');
	if (pos != string::npos)
	{
		string suffix = s.substr(pos);
		cout << suffix << endl;
	}
	return 0;
}

在这里插入图片描述

getline(字符串输入)

跟cin作用类似,只不过它可以传空格等字符,而cin不行

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

swap(字符串交换)

交换函数

可以直接交换对象或者单个字符
在这里插入图片描述
在这里插入图片描述

compare(字符串比较)

字符串比较函数(用的不多)一般直接使用 > < = 等运算符

在这里插入图片描述
在这里插入图片描述
C++的string类重载了很多比较的操作符,所以可以直接使用别的方法比较比如 [ ]+下标:
在这里插入图片描述
在这里插入图片描述

reverse(字符串逆置)

这个函数需要引用头文件 #include “algorithm”

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

侠客cheems

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值