C++ | string用法指南

2024-02-27 1284阅读

温馨提示:这篇文章已超过406天没有更新,请注意相关的内容是否还可用!

目录

前言

一、初始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购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]