C++ | string用法指南

02-27 1281阅读

目录

前言

一、初始string

1、string是什么

2、string的使用

(1)构造函数

(2)赋值重载

(3)容量相关接口

(4) 迭代器

(5)元素访问

(6)修改

(7)其他类型函数

(8)非成员函数


前言

        本文主要介绍STL容器之一  ----  string,在学习C++的过程中,我们要将C++视为一个语言联邦(摘录于Effective C++ 条款一)。如何理解这句话呢,我们学习C++,可将其分为四个板块;分别为C、Object-Oriented C++(面向对象的C++)、Template C++(模板)、STL。本文就介绍STL中的string;

一、初始string

        string,顾名思义,字符串的意思,在C语言中,我们用字符数组来代替字符串,而C++中,我们使用自定义类型string,本文采用先使用,再模拟实现的方式介绍string;首先我们需要学习string的具体使用方法,随后进行模拟实现,巩固对string的认识;本文所有的用法参考C++文档 C++参考文档 

1、string是什么

        string是STL文档的容器之一,是一个自定义类型,是一个类,由类模板basic_string实例化出来的一个类;

C++ | string用法指南

 类模板basic_string实例化出来了四个类,如下图所示;

C++ | string用法指南

        实例化出的这四个类不同的是他们的编码方式,分别为 char、char16_t、char32_t、wchar_t 这四种;这里提出了一个新的概念,编码;那么什么是编码呢?其实早在我们学习C语言时,我们就接触过编码;没错,就是ASCII(美国信息交换标准代码);以下来自百度百科;

C++ | string用法指南

        什么意思呢,在我们的计算机中,所有的数据只能够以01二进制编码的方式储存,ASCII就是将日常使用的一些符号数字字母收集起来;用数字一一对应表示;而随着计算机的发展,ASCII并不够满足各国的语言,只能针对于英语;因此,为了更好的传播计算机,出现了各种编码;Unicode(万国码)就是其中的一个代表;

C++ | string用法指南

        由于各国语言的差异,可能存在一个字节不能够一一对应文字的情况,不像英文由26个英文字母组成单词,只需保存26个字母即可,而实际上许多国家的语言并不能由一字节的空间能表示出来,因此由不同储存方式繁衍出了 UTF-8、UTF-16、UTF-32,其中数字代码比特位;其中上述 basic_string 实例化出的类储存方式如下:

char          ---  1字节

char16_t   ---   2字节

char32_t   ---   4字节

wchar_t    ---   2字节

总结:上述知识需要有几个基本的了解,我们需记住string是basic_string实例出来的一个类,其类型为一个字节的char;

2、string的使用

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

(1)构造函数

        在C++98中,string的构造函数一种有如下7种;

int main()
{
	// 1、无参默认构造
	// string();
	string s1;
	// 2、拷贝构造   
	// string (const string& str);
	string s2(s1);
	// 4、通过字符串常量初始化   
	// string (const char* s);
	string s4("hello world");
	// 3、通过字符串子串初始化   
	// string (const string& str, size_t pos, size_t len = npos);
	string s3(s4, 5, 5);
	// 5、通过字符串前n个字符初始化   
	// string (const char* s, size_t n);
	string s5("hello wrold", 6);
	// 6、用n个字符c初始化字符串  
	//  string (size_t n, char c);
	string s6(10, 'x');
	// 7、迭代器区间初始化(暂不介绍)
	return 0;
}

        其中提一下第三种,pos为子串的位置,len子串的长度,若len大于从子串pos位置开始后面字符总数,则表示初始化到子串结尾即可,比如我们要用 “hello world” 初始化字符串,若pos为6,len为20,则用world初始化字符串s1;len还有一个缺省值npos,其数值为无符号整型的-1,也就是无符号的最大值(无符号无负数);

C++ | string用法指南

 (2)赋值重载

赋值重载使string能够用=对string对象重新赋值,string的赋值重载一共有有如下三种;

C++ | string用法指南

int main()
{
	string tmp("hello world");
	string s1;
	string s2;
	string s3;
	// 1、string类进行赋值重载
	s1 = tmp;
	// 2、使用字符串常量赋值重载
	s2 = "hello world";
	// 3、使用字符赋值重载
	s3 = 'A';
    return 0;
}

 (3)容量相关接口

         以下为string类容量相关接口,其中最后一个为缩容接口,由于性能原因,使用的并不多;

C++ | string用法指南

 首先介绍如下六个简单一些的接口;

int main()
{
	string s1("hello world");
	// string中储存的字符个数(不包括\0)
	cout 
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]