C++ --> string类的使用(详细介绍)
创始人
2024-11-19 13:06:31
0

前言

说完STL的重要性,我们就要接触第一个string,虽然string不在容器内,但是仍然有很重要的地位,简单陈述string常用的操作。

basic_string

C++的std::basic_string类是一个模板类,它支持多种字符类型。

  • char:用于表示单个字节的字符,通常用于ASCII编码。
  • wchar_t:用于表示宽字符,可以用来支持更广泛的字符集,如Unicode。
  • char16_t:用于表示16位的Unicode字符(UTF-16编码)。
  • char32_t:用于表示32位的Unicode字符(UTF-32编码)。
  • char8_t:用于表示UTF-8编码的字符。

basic_srring实例化出来4中类型

string wstring u16string u32string 

string 就是basic_string实例化出来的类型

Unicode是什么

  1. 统一码(Unicode),也叫万国码、单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。
  2. 统一码是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

解释

  • Unicode的出现就为了解决世界多样化的语言问题,Unicode的目的是为了解决传统字符编码方案的局限,满足跨语言、跨平台进行文本转换、处理的要求。Unicode能够表示世界上几乎所有的字符系统,包括汉字、拉丁字母、希腊字母、阿拉伯字母等,并为每个字符提供一个唯一的编号,称为码点。

  • Unicode是一个字符集,而不是编码方式。实际的编码方式有多种,其中最常见的是UTF-8``UTF-16``UTF-32 UTF-8是一种变长编码方式,可以使用1到4个字节来表示每个Unicode字符,它完全兼容ASCII编码,使得英文字符只需要一个字节就可以表示

string介绍

在C++编程中,string类是标准模板库(STL)中的一个核心组成部分,它提供了一种安全、便捷的方式来处理文本数据。string类封装了字符数组,并提供了一系列成员函数来执行字符串的创建、修改、连接、查找、替换等操作。

一、string默认成员函数

string出现的时间实际是早于STL的,是后来划分进STL库的,所以string开始的设计比较冗余,有许多没有必要的接口(共100多个)这也是被广大C++程序员吐槽的一个槽点,我们无需将每一个接口都记住,我们需要将核心接口记住并熟练使用,遇见一些默认的接口查看文档就可以啦!

构造函数(constructor)

截取C++官网

default (1)string();
copy (2)string(const string & str);
from c-string (4)string (const char* s);
from sequence (5)string(const char* s, size_t n);
fill (6)string(size_t n, char c);
int main() { 	//1.无参数构造函数 	//string(); 	string s1; 	//2.拷贝构造 	//string(const string & str); 	string s2(s1); 	//3.字符串常量初始化 	//string(const char* s); 	string s3("hello world"); 	//4.字符串前n个字符初始化 	//string(const char* s, size_t n); 	string s4("hello world", 5); 	//5.用n个字符初始化 	//string(size_t n, char c); 	string s5(5, '*');  	cout << s1 << endl;//空 	cout << s2 << endl;//空 	cout << s3 << endl;//hello world 	cout << s4 << endl;//hello 	cout << s5 << endl;//*****  	return 0; } 

析构函数(destructor)

析构函数很简单,在此不过多介绍

~string(); 

赋值运算符重载

截取C++官网

功能函数声明
string (1)string& operator= (const string& str);
c-string (2)string& operator= (const char* s);
character (3)string& operator= (char c);

=进行重载;

int main() {  	//类 	//string& operator= (const string & str); 	string s1("hello world"); 	string s2; 	s2 = s1; 	//重载常量字符串 	//string & operator= (const char* s); 	string s3 = "hello world"; 	//重载字符类型 	//string& operator= (char c); 	string s4 = "*";  	cout << s1 << endl;//hello wold 	cout << s2 << endl;//hello wold 	cout << s3 << endl;//hello wold 	cout << s4 << endl;//* 	return 0; } 

二、string相关成员函数

capacity

截取C++官网

功能函数声明
sizesize_t size() const;
lengthsize_t length() const;
resize(1)void resize (size_t n);
(2) void resize (size_t n, char c);
capacitysize_t capacity() const;
clearvoid clear();
emptybool empty() const;

操作

int main() { 	string s = "hello world"; 	 	//1.计算字符串大小 	cout << s.size() << endl;  // 11      	//2.计算字符串长度 	cout << s.length() << endl;// 11      	//3.计算字符串容量 	cout << s.capacity() << endl;// 15 在不同编译器下capacity扩容规则是一样的      	//4.指定大小,默认填充\0,可以指定字符; 	s.resize(13); 	cout << s << endl;// hello world\0\0 	s.resize(15,'x'); 	cout << s << endl;   //hello worldxxxx      	//5.判断字符串是否是空 	cout << s.empty() << endl;// 0 -->返回值是bool      	//6.清除字符串 	s.clear(); 	cout << s.empty() << endl;// 1 -->为真 	 	return 0; } 

Element access

operator[ ]

下标访问

截取C++官网

函数声明
char& operator[] (size_t pos);
const char& operator[] (size_t pos) const;
操作
int mian () {     string s = "hello world";     cout << s[1] << endl;//打印出  e     return 0; } 

Modifiers

operator+=

截取C++官网

类型函数声明
string (1)string& operator+= (const string& str);
c-string (2)string& operator+= (const char* s);
character (3)string& operator+= (char c);
操作
int mian () {     	string s = "hello world"; 	string s1 = "xxxx"; 	//后面添加一个string类 	s += s1; 	cout << s << endl;//hello worldxxxx 	//后面添加字符串 	s += "ccc"; 	cout << s << endl;//hello worldxxxxccc 	//后面添加一个字符 	s += 'v'; 	cout << s << endl;//hello worldxxxxcccv     return 0; } 

append

截取C++官网

函数声明
string& append (const string& str);
string& append (const char* s);
string& append (size_t n, char c);
操作

(操作同operator+=),oparator的底层就是append.

int mian () {      string s = "hello world"; 	string s1 = "xxxx"; 	//后面添加一个string类 	s.append(s1); 	cout << s << endl;//hello worldxxxx 	//后面添加字符串 	s.append("ccc"); 	cout << s << endl;//hello worldxxxxccc 	//后面添加一个字符 	s.append ('v'); 	cout << s << endl;//hello worldxxxxcccv     return 0; } 

insert

函数声明
string& insert (size_t pos, const string& str);
string& insert (size_t pos, const char* s);
string& insert (size_t pos, size_t n, char c);
操作
	string s = "hello world"; 	string s1 = "xxxx"; 	//在第一个位置插入string类 	cout << s.insert(1, s1) << endl;//hxxxxello world 	//在第二个位置插入字串 	cout << s.insert(2, "xxx") << endl;//hxxxxxxxello world 	//在第三个位置插入5个'c' 	cout << s.insert(3, 5,'c') << endl;//hxxcccccxxxxxello world 

erase

函数声明
string& erase (size_t pos = 0, size_t len = npos);
操作
int main () { 	string s = "hello world"; 	//在第0个位置删除2个字符 	cout << s.erase(0, 2) << endl; 	//在地pos位置删除后面全部,npos为size_t = -1 	cout << s.erase(2) << endl;  	return 0; } 

String operations

c_str

得到一个C字符串

函数声明
const char* c_str() const;
操作
int mian () {     string s = "hello world"; 	const char* p = s.c_str();     return 0; } 

find

函数声明
size_t find (const string& str, size_t pos = 0) const;
size_t find (const char* s, size_t pos = 0) const;
size_t find (char c, size_t pos = 0) const;
操作
int mian () {      string s1 = " "; 	string s = "hello world"; 	//查找string对象 	cout << s.find(s1) << endl;//5 	//查找字符串 	cout << s.find("ll") << endl;//2 	//查找字符 	cout << s.find('o') << endl;//4     return 0; } 

Non-member function overloads

operator>> (string) operator<< (string)

流插入和提取,可以让我们更加轻松的打印。

相关内容

热门资讯

一分钟内幕!科乐吉林麻将系统发... 一分钟内幕!科乐吉林麻将系统发牌规律,福建大玩家确实真的是有挂,技巧教程(有挂ai代打);所有人都在...
一分钟揭秘!微扑克辅助软件(透... 一分钟揭秘!微扑克辅助软件(透视辅助)确实是有挂(2024已更新)(哔哩哔哩);1、用户打开应用后不...
五分钟发现!广东雀神麻雀怎么赢... 五分钟发现!广东雀神麻雀怎么赢,朋朋棋牌都是是真的有挂,高科技教程(有挂方法)1、广东雀神麻雀怎么赢...
每日必看!人皇大厅吗(透明挂)... 每日必看!人皇大厅吗(透明挂)好像存在有挂(2026已更新)(哔哩哔哩);人皇大厅吗辅助器中分为三种...
重大科普!新华棋牌有挂吗(透视... 重大科普!新华棋牌有挂吗(透视)一直是有挂(2021已更新)(哔哩哔哩)1、完成新华棋牌有挂吗的残局...
二分钟内幕!微信小程序途游辅助... 二分钟内幕!微信小程序途游辅助器,掌中乐游戏中心其实存在有挂,微扑克教程(有挂规律)二分钟内幕!微信...
科技揭秘!jj斗地主系统控牌吗... 科技揭秘!jj斗地主系统控牌吗(透视)本来真的是有挂(2025已更新)(哔哩哔哩)1、科技揭秘!jj...
1分钟普及!哈灵麻将攻略小,微... 1分钟普及!哈灵麻将攻略小,微信小程序十三张好像存在有挂,规律教程(有挂技巧)哈灵麻将攻略小是一种具...
9分钟教程!科乐麻将有挂吗,传... 9分钟教程!科乐麻将有挂吗,传送屋高防版辅助(总是存在有挂)1、完成传送屋高防版辅助透视辅助安装,帮...
每日必看教程!兴动游戏辅助器下... 每日必看教程!兴动游戏辅助器下载(辅助)真是真的有挂(2025已更新)(哔哩哔哩)1、打开软件启动之...