C++ --> string类的使用(详细介绍)

简介: C++ --> string类的使用(详细介绍)

前言

说完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是什么

  1. 统一码(Unicode),也叫万国码、单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。
  2. 统一码是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

解释

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)

流插入和提取,可以让我们更加轻松的打印。

目录
相关文章
|
1月前
|
编解码 Java 开发者
Java String类的关键方法总结
以上总结了Java `String` 类最常见和重要功能性方法。每种操作都对应着日常编程任务,并且理解每种操作如何影响及处理 `Strings` 对于任何使用 Java 的开发者来说都至关重要。
203 5
|
9月前
|
存储 安全 C语言
C++ String揭秘:写高效代码的关键
在C++编程中,字符串操作是不可避免的一部分。从简单的字符串拼接到复杂的文本处理,C++的string类为开发者提供了一种更高效、灵活且安全的方式来管理和操作字符串。本文将从基础操作入手,逐步揭开C++ string类的奥秘,帮助你深入理解其内部机制,并学会如何在实际开发中充分发挥其性能和优势。
|
9月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
5月前
|
对象存储 C++ 容器
c++的string一键介绍
这篇文章旨在帮助读者回忆如何使用string,并提醒注意事项。它不是一篇详细的功能介绍,而是一篇润色文章。先展示重载函数,如果该函数一笔不可带过,就先展示英文原档(附带翻译),最后展示代码实现与举例可以直接去看英文文档,也可以看本篇文章,但是更建议去看英文原档。那么废话少说直接开始进行挨个介绍。
101 3
|
5月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
131 0
|
5月前
|
存储 编译器 C语言
关于string的‘\0‘与string,vector构造特点,反迭代器与迭代器类等的讨论
你真的了解string的'\0'么?你知道创建一个string a("abcddddddddddddddddddddddddd", 16);这样的string对象要创建多少个对象么?你知道string与vector进行扩容时进行了怎么的操作么?你知道怎么求Vector 最大 最小值 索引 位置么?
114 0
|
5月前
|
存储 编译器 程序员
c++的类(附含explicit关键字,友元,内部类)
本文介绍了C++中类的核心概念与用法,涵盖封装、继承、多态三大特性。重点讲解了类的定义(`class`与`struct`)、访问限定符(`private`、`public`、`protected`)、类的作用域及成员函数的声明与定义分离。同时深入探讨了类的大小计算、`this`指针、默认成员函数(构造函数、析构函数、拷贝构造、赋值重载)以及运算符重载等内容。 文章还详细分析了`explicit`关键字的作用、静态成员(变量与函数)、友元(友元函数与友元类)的概念及其使用场景,并简要介绍了内部类的特性。
211 0
|
7月前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
265 12
|
8月前
|
设计模式 安全 C++
【C++进阶】特殊类设计 && 单例模式
通过对特殊类设计和单例模式的深入探讨,我们可以更好地设计和实现复杂的C++程序。特殊类设计提高了代码的安全性和可维护性,而单例模式则确保类的唯一实例性和全局访问性。理解并掌握这些高级设计技巧,对于提升C++编程水平至关重要。
156 16
|
8月前
|
缓存 安全 Java
《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
186 11