标准库中的String类 String(C++)【1】

学习String的时候我是对照https://legacy.cplusplus.com/这个网站进行理解

string类的基础

在这里插入图片描述

  1. 字符串是表示字符序列的类
  2. 标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作
    单字节字符字符串的设计特性。
  3. string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信
    息,请参阅basic_string)。
  4. string类是basic_string模板类的一个实例,它使用char来实例化basic_string模板类,并用char_traits
    和allocator作为basic_string的默认参数(根于更多的模板信息请参考basic_string)。
  5. 注意,这个类独立于所使用的编码来处理字节:如果用来处理多字节或变长字符(如UTF-8)的序列,这个
    类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。

简单来说:
String是C++标准模板库(STL)的一部分,它封装了字符数组,并提供了一系列操作字符串的方法。要使用String的时候,你需要包含头文件<string>

#include <string>

std::string str = "Hello, World!";

String的特点

  • 动态大小:string可以动态地增长和缩小,不需要预先指定大小。
  • 操作简便:提供了丰富的成员函数来执行常见的字符串操作,如连接、分割、查找和替换。
  • 易于集成:可以与C++的其他特性,如迭代器、算法等无缝集成。

String常用的接口(黑框标记的是常用接口)

构造函数

在这里插入图片描述

1.string();
构造空的string类对象,即空字符串

2.string(const string&str);
拷贝构造函数

3.string (const string& str, size_t pos, size_t len = npos);
复制str中从字符位置pos开始并跨越len个字符的部分(如果str太短或len给的值是npos,则复制到str的末尾)

4.string(const char* s);
用C-string(C语言的方法)来构造string类对象

6.string(size_t n, char c);
string类对象中包含n个字符c

#include <iostream>
#include <string>
using namespace std;

void Teststring1()
{
	string s1; // 构造空的string类对象s1
	string s2("hello world"); // 用C格式字符串构造string类对象s2
	string s3(s2,6,5);
	string s4(s2); // 拷贝构造s3
	
	cout << s1 << endl;
	cout << s2 << endl;
	cout << s3 << endl;
	cout << s4 << endl;
}

在这里插入图片描述

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

第一种 下标+[ ]

在这里插入图片描述1.size
返回字符串的长度,以字节为单位。

在这里插入图片描述
2.operator[]
返回对字符串中位置为pos的字符的引用,作用是自定义类型能向内置类型上使用。在下面的程序里operator[]模仿的是数组访问的行为

void Teststring2()
{
	string s1("hello world");

	for (int i = 0; i < s1.size();i++)
	{
		cout << s1[i] << " ";
	}

	for (int i = 0; i < s1.size(); i++)
	{
		cout << s1.operator[](i) << " ";
	}
	cout << endl;
}

注意:
在这里插入图片描述

第二种 迭代器

在这里插入图片描述
1.capacity
返回当前为字符串分配的存储空间的大小,以字节表示

在这里插入图片描述

2.Iterator(迭代器)
提供了一种统一的方式来访问和操作容器中的元素,而不需要关心容器的具体类型。迭代器类似于指针,它们指向容器中的某个元素,并且提供了一系列操作来遍历容器。

在这里插入图片描述
3.end
返回一个迭代器,该迭代器指向字符串的末尾之后的字符,最后一个数据的下一个位置

void Teststring3()
{
	string s1("hello world");
	string::iterator it1 = s1.begin();
	while (it1 != s1.end())
	{
		cout << *it1 << " ";
		it1++;
	}
	cout << endl;
}

第三种 范围for

范围for不仅能遍历数组也能遍历容器

void Teststring4()
{
	string s1("hello world");
	for (auto e : s1)
	{
		cout << e << " ";
	}
	cout << endl;
}

范围for自动取容器(s1)中的数据给e,自动向后迭代,自动结束(其实底层就是迭代器)

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值