首页 > 编程语言 >【C++STL基础入门】string类的基础使用

【C++STL基础入门】string类的基础使用

时间:2023-08-15 11:37:55浏览次数:41  
标签:std string STL C++ str 字符串 include

@TOC


前言

本系列文章使用VS2022,C++20版本

STL(Standard Template Library)是C++的一个强大工具集,其中的string类是STL中一个常用的容器。本文将介绍string类的基本使用方法。

【C++STL基础入门】string类的基础使用_string类


一、STL使用概述

在STL中,我们的每一个容器/string字符串等都是使用面向对象技术来实现的,我们只需要调用里面的函数即可完成任务。在使用过程中,我们需要using namespace std;这个才可以使用,然后添加对应的头文件。 比如像下面这个:

#include <string>
using namespace std;

如果你不想加下面这个,你可以这样写:

#include <string>

std::XXXXXX

XXXXX代表我们的类名,需要在前面加上std::

二、string类概述

tring类是STL中用于处理字符串的容器,提供了许多对字符串进行操作的方法,例如插入、删除、查找、替换等。它的特点在于可以动态地调整字符串的长度,而且内部实现了在内存中存储字符串的机制,屏蔽了底层细节。

1.string类的构造函数

  1. 无参构造string()
  2. string( size_type length, char ch );指定长度ch构造
  3. string( const char *str );字符串初始化构造
  4. string( const char *str, size_type length );str前几个进行构造
  5. string( string &str, size_type index, size_type length );str中间几个构造
  6. string(const string& str);拷贝构造

string输出

1.直接使用<<输出string就行了 2.使用c_str()函数返回const char *再输出

示例代码

#include <iostream>
#include <string>

int main() {
  // 1. 无参构造string()
  std::string str1;
  std::cout << "str1: " << str1 << std::endl;

  // 2. string(size_type length, char ch);指定长度ch构造
  std::string str2(5, 'A');
  std::cout << "str2: " << str2 << std::endl;

  // 3. string(const char *str);字符串初始化构造
  const char* cstr = "Hello, STL!";
  std::string str3(cstr);
  std::cout << "str3: " << str3 << std::endl;

  // 4. string(const char *str, size_type length);str前几个进行构造
  std::string str4(cstr, 5);
  std::cout << "str4: " << str4 << std::endl;

  // 5. string(string &str, size_type index, size_type length);str中间几个构造
  std::string str5(str3, 7, 3);
  std::cout << "str5: " << str5 << std::endl;

  // 6. string(const string& str);拷贝构造
  std::string str6(str3);
  std::cout << "str6: " << str6 << std::endl;

  return 0;
}

输出结果:

str1: str2: AAAAA str3: Hello, STL! str4: Hello str5: STL str6: Hello, STL!

【C++STL基础入门】string类的基础使用_string类_02

2.string类属性

属性是什么

当我们谈论字符串时,可以将其视为一个字符序列。string类是C++中提供的用于操作字符串的类。它具有许多属性(也称为成员变量或数据成员),这些属性可以让我们更轻松地操作和管理字符串数据。

属性API

  1. capacity();函数返回一个整数,表示为字符串分配的内存空间的大小,即字符串对象的容量。它指的是当前字符串对象可以容纳的字符数的上限。通常情况下,容量大于或等于字符串的长度。该函数没有参数。
  2. reserve();函数用于预留字符串的内存空间,以便容纳指定数量的字符。它可以用来提前分配足够的内存,以避免频繁的内存重分配。 这个函数接受一个整数参数,表示要预留的新容量。
  3. length();函数用于预留字符串的内存空间,以便容纳指定数量的字符。它可以用来提前分配足够的内存,以避免频繁的内存重分配。 这个函数接受一个整数参数,表示要预留的新容量。
  4. size()函数返回一个整数,表示字符串的长度,即字符串中包含的字符的数量。与之类似的,length()函数也返回字符串的长度。这两个函数是等价的,可以根据个人的偏好来选择使用。
  5. resize():重新设置字符个数
  6. max_size()表示字符串对象可以达到的最大长度。这个值是由编译器和系统环境决定的。

示例代码

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello World";

    // capacity()
    std::cout << "Capacity: " << str.capacity() << std::endl;

    // reserve()
    str.reserve(20);
    std::cout << "Capacity after reserve: " << str.capacity() << std::endl;

    // length() or size()
    std::cout << "Length: " << str.length() << std::endl;
    std::cout << "Size: " << str.size() << std::endl;

    // resize()
    str.resize(8);
    std::cout << "After resize: " << str << std::endl;

    return 0;
}

输出:

【C++STL基础入门】string类的基础使用_字符串_03

Capacity: 11
Capacity after reserve: 30
Length: 11
Size: 11
After resize: Hello Wo

3.输出

输出全部

1、使用<<运算符输出 2、使用函数c_str()返回const char *,然后打印

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";

    // 使用 << 运算符输出
    std::cout << "Output using << operator: " << str << std::endl;

    // 使用 c_str() 函数返回 const char *
    const char* cstr = str.c_str();
    std::cout << "Output using c_str() function: " << cstr << std::endl;

    return 0;
}

输出结果:

Output using << operator: Hello, World!
Output using c_str() function: Hello, World!

输出单个字符

1、使用at(index)函数指定返回的字符,越界throw(out_of_range) 2、使用下标运算符[index]指定字符

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello World";

    // 使用 at(index) 函数
    try {
        char ch = str.at(4);  // 获取索引为4的字符
        std::cout << "Character at index 4: " << ch << std::endl;

        // 越界访问
        char outOfRangeChar = str.at(20);  // 索引超出字符串长度,会抛出 std::out_of_range 异常
        std::cout << "Character at index 20: " << outOfRangeChar << std::endl;
    } catch (const std::out_of_range& e) {
        std::cerr << "Exception: " << e.what() << std::endl;
    }

    // 使用下标运算符 [index]
    char ch = str[2];  // 获取索引为2的字符
    std::cout << "Character at index 2: " << ch << std::endl;

    return 0;
}

输出结果:

Character at index 4: o
Exception: basic_string::at: __n (which is 20) >= this->size() (which is 11)
Character at index 2: l

总结

STL中的string类是一个强大且常用的容器,它提供了丰富的操作方法用于处理字符串。通过采用面向对象的方式实现,STL封装了底层的实现细节,提供了高效和便利的字符串操作接口。面向对象实现的好处包括封装性、可复用性和继承多态等,使得string类在实际应用中更加灵活和扩展性强。掌握STL的string类基础是C++开发的重要一步,通过深入理解其使用方法和面向对象的实现方式,可以更加高效地处理和操作字符串。

标签:std,string,STL,C++,str,字符串,include
From: https://blog.51cto.com/u_16176403/7086439

相关文章

  • C++ 调用 Python 接口 Mat转Numpy
    参考网站:https://blog.csdn.net/qq7835144/article/details/106073110?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-1&spm=1001.2101.3001.4242https://blog.csdn.net/weixin_46400740/article/details/116711323?spm=1001.2014.3001.5501 1、配......
  • cl_wdr_conversion_utils=>from_string
    在sap中,每种货币单位都可以维护对应的小数位数(如果未维护,则使用默认两位小数),该信息保存在表tcurx中。在使用TCode:OY04更改该数据时,会有如下提示:在您继续之前,请仔细阅读以下内容。如果不留意此注释,您可能会用事务对系统造成不可挽回的损坏。在R/3系统表中,货币字段作为小数存储,其......
  • C/C++基础知识点——设计原则及设计模式
    如何实现模块间高内聚、低耦合?封装与抽象;添加中间层;模块化;设计思想与原则单一职责;接口隔离原则;依赖倒置;迪米特原则;多用组合少用继承;设计模式:观察者模式设计原则及设计模式六大设计原则:单一职责原则;里氏替换原则;开闭原则;依赖倒置原则;接口隔离原则;最少知识原则。......
  • 如何向这个public static void main(String[] args)中的args数组传递参数呢
    如何向这个publicstaticvoidmain(String[]args)中的args数组传递参数呢要向publicstaticvoidmain(String[]args)中的args数组传递参数,可以在命令行中运行Java程序时附加参数。以下是两种常见的方法:在命令行中手动输入参数:我们首先要进入这个类所在的文件夹在......
  • 7.1 C/C++ 实现动态数组
    动态数组相比于静态数组具有更大的灵活性,因为其大小可以在运行时根据程序的需要动态地进行分配和调整,而不需要在编译时就确定数组的大小。这使得动态数组非常适合于需要动态添加或删除元素的情况,因为它们可以在不浪费空间的情况下根据需要动态增加或减少存储空间。动态数组的内存......
  • 7.2 C/C++ 实现动态链表
    动态链表是一种常用的动态数据结构,可以在运行时动态地申请内存空间来存储数据,相比于静态数组和静态链表,更加灵活和高效。在动态链表中,数据元素被组织成一条链表,每个元素包含了指向下一个元素的指针,这样就可以通过指针将所有元素串联起来。使用动态链表存储数据时,不需要预先申请内......
  • 7.3 C/C++ 实现顺序栈
    顺序栈是一种基于数组实现的栈结构,它的数据元素存储在一段连续的内存空间中。在顺序栈中,栈顶元素的下标是固定的,而栈底元素的下标则随着入栈和出栈操作的进行而变化。通常,我们把栈底位置设置在数组空间的起始处,这样在进行入栈和出栈操作时,只需要维护栈顶指针即可。顺序栈的实现比......
  • 7.4 C/C++ 实现链表栈
    相对于顺序栈,链表栈的内存使用更加灵活,因为链表栈的内存空间是通过动态分配获得的,它不需要在创建时确定其大小,而是根据需要逐个分配节点。当需要压入一个新的元素时,只需要分配一个新的节点,并将其插入到链表的头部;当需要弹出栈顶元素时,只需要删除链表头部的节点,并释放其所占用的内......
  • 7.5 C/C++ 实现链表队列
    链表队列是一种基于链表实现的队列,相比于顺序队列而言,链表队列不需要预先申请固定大小的内存空间,可以根据需要动态申请和释放内存。在链表队列中,每个节点包含一个数据元素和一个指向下一个节点的指针,头节点表示队头,尾节点表示队尾,入队操作在队尾插入元素,出队操作在队头删除元素,队......
  • C++11时间日期库chrono的使用
    chrono是C++11中新加入的时间日期操作库,可以方便地进行时间日期操作,主要包含了:duration,time_point,clock。时钟与时间点chrono中用time_point模板类表示时间点,其支持基本算术操作;不同时钟clock分别返回其对应类型的时间点。clock时钟是从一个时点开始,按照某个刻度的计数;chrono同......