string类的介绍与使用【C++】

05-13 1123阅读

string类

  • 前言
  • 一、为什么学习string类
    • C语言中的字符串
    • 示例
    • 二、标准库中的string类
      • string类
      • string类的常用接口说明
        • string类对象的常见构造
        • string类对象的容量操作
        • string的接口测试及使用
        • string类对象的访问及遍历操作
          • 下标和方括号遍历
          • 范围for遍历
          • 迭代器遍历
          • 相同的代码,在不同的编译器有不同的空间
          • string类对象的修改操作
          • string类非成员函数
          • vs和g++下string结构的说明
          • 示例
            • 例一
            • 例二
            • 例三
            • 例四
            • 例五
            • 其他
            • 三、string类的模拟实现
              • 经典的string类问题
              • 浅拷贝
              • 深拷贝
                • 传统版写法的String类
                • 现代版写法的String类
                • 写时拷贝
                • string类的模拟实现
                • 四、扩展
                  • 文章
                  • sort
                  • vs编译器string的扩容
                    • 总结
                      • 扩容优化
                      • 留存空间
                      • g++编译器string的扩容
                      • capacity()
                      • reserve()
                      • resize()
                      • shrink_to_fit
                      • at
                      • insert
                      • erase
                      • npos
                      • 解决c++默认遇到空格和换行就结束的问题
                        • getline()
                        • 循环
                        • to_string
                        • stoi

                          前言

                          string 类是编程语言中用于表示和操作字符串的基本数据类型或类。它提供了一系列方法和操作,允许开发者对字符串进行创建、修改、查找、比较、转换等。string 类通常具有不可变性,意味着一旦创建了字符串对象,其内容就不能被修改,但可以创建新的字符串对象来表示修改后的内容。这种特性有助于在多线程环境中保持数据的安全性。string 类还提供了各种构造函数、操作符重载和格式化功能,使字符串操作更加灵活和高效。

                          在C++中,string类函数的长度范围可以是非法的,但不建议用。

                          string类的介绍与使用【C++】


                          一、为什么学习string类

                          C语言中的字符串

                          C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。

                          示例

                          把字符串转换成整数

                          字符串相加

                          在OJ中,有关字符串的题目基本以string类的形式出现,而且在常规工作中,为了简单、方便、快捷,基本都使用string类,很少有人去使用C库中的字符串操作函数。

                          二、标准库中的string类

                          string类

                          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)的序列,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。

                          总结

                          1. string是表示字符串的字符串类
                          2. 该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。
                          3. string在底层实际是:basic_string模板类的别名t
                          typedef basic_string
                          string;
                          
                          1. 不能操作多字节或者变长字符的序列。

                          在使用string类时,必须包含#include头文件以及using namespace std;

                          string类的常用接口说明

                          string类对象的常见构造

                          函数名称(constructor)功能说明
                          string()构造空的string类对象,即空字符串
                          string(const char* s)用C-string来构造string类对象
                          string(size_t n, char c)string类对象中包含n个字符c
                          string(const string&s)拷贝构造函数
                          void Teststring()
                          {
                          	string s1; // 构造空的string类对象s1
                          	string s2("hello bit"); // 用C格式字符串构造string类对象s2
                          	string s3(s2); // 拷贝构造s3
                          }
                          

                          string类对象的容量操作

                          函数名称功能说明
                          size返回字符串有效字符长度
                          length返回字符串有效字符长度
                          capacity返回空间总大小
                          empty检测字符串释放为空串,是返回true,否则返回false
                          clear清空有效字符
                          reserve为字符串预留空间**
                          resize将有效字符的个数该成n个,多出的空间用字符c填充

                          在C++中,string类有两个成员函数size()和length(),它们都用于返回字符串的长度,但它们之间没有区别,可以互换使用。这是因为C++标准库中的string类是基于字符数组实现的,它们都返回的是存储在string对象中的字符个数。因此,在C++中,size()和length()函数可以互相替代使用,没有区别。

                          string的接口测试及使用

                          #define _CRT_SECURE_NO_WARNINGS
                          #include 
                          using namespace std;
                          #include 
                          // 测试string容量相关的接口
                          // size/clear/resize
                          void Teststring1()
                          {
                          	// 注意:string类对象支持直接用cin和cout进行输入和输出
                          	string s("hello, bit!!!");
                          	cout 
                          	string s;
                          	// 测试reserve是否会改变string中有效元素个数
                          	s.reserve(100);
                          	cout 
                          	string s;
                          	size_t sz = s.capacity();
                          	cout 
                          		s.push_back('c');
                          		if (sz != s.capacity())
                          		{
                          			sz = s.capacity();
                          			cout 
                          	string s;
                          	s.reserve(100);
                          	size_t sz = s.capacity();
                          	cout 
                          		s.push_back('c');
                          		if (sz != s.capacity())
                          		{
                          			sz = s.capacity();
                          			cout 
                          	string s1("hello Bit");
                          	const string s2("Hello Bit");
                          	cout 
                          	string s("hello Bit");
                          	// 3种遍历方式:
                          	// 需要注意的以下三种方式除了遍历string对象,还可以遍历是修改string中的字符,
                          	// 另外以下三种方式对于string而言,第一种使用最多
                          	// 1. for+operator[]
                          	for (size_t i = 0; i 

VPS购买请点击我

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

目录[+]