前言
说完
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是什么
- 统一码(Unicode),也叫万国码、单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。
- 统一码是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
解释:
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++官网
功能 | 函数声明 |
size | size_t size() const; |
length | size_t length() const; |
resize | (1)void resize (size_t n); (2) void resize (size_t n, char c); |
capacity | size_t capacity() const; |
clear | void clear(); |
empty | bool 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)
流插入和提取,可以让我们更加轻松的打印。