String类(上)

简介: String类

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c++,Python等

> 座右铭:松树千年终是朽,槿花一日自为荣。

> 目标:熟悉string库

> 毒鸡汤:人生就像一场旅行,不在乎目的地,而在乎沿途的风景以及看风景的心情。

> 望小伙伴们点赞👍收藏✨加关注哟💕💕

🌟前言

       学习这个板块可能有点头疼,因为太多的函数,学完都不知道学的是啥😅,正常。所以博主介绍一个学习c++的网站,这个网站也是c++创始人所写的🤔,方便大家学习c++,太良心啦🥰。

官网:cplusplus.com - The C++ Resources Network

⭐主体

       基于C语言的字符串,用起来是在复杂,稍不留神可能还会越界访问。为了操作方便,c++产生了string库,便于操作字符串。咱们就按照c++给的官网学习string库,具体分为六大板块,分别为:Member functions(成员函数),Iterators(迭代器),Capacity(容量),Element access(元素访问),Modifiers(修改器),String operations (字符串操作)☺️☺️☺️。

🌙Member functions(成员函数)

在这个板块中挺重要的,咱也不是全学,到时候可能真的就是从入门到放弃。

💫constructor(构造函数)

构造字符串对象,根据使用的构造函数版本初始化其值。

也就是说根据创建的string类来进行赋初始化。

  • str:另一个字符串对象,其值被复制或获取。
  • pos:str中作为子字符串复制到对象的第一个字符的位置。如果这大于str的长度,则抛出out_of_range。注意:str中的第一个字符由值0(而不是1)表示。
  • len:要复制的子字符串的长度(如果字符串较短,则复制尽可能多的字符)。字符串::npos的值表示str结束之前的所有字符。s

那咱们看看这个代码:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    // 无参构造函数
    string s1();
    // 常量字符串构造函数
    string s2("hello world");
    cout << s2 << endl;
    // 拷贝构造函数
    string s3(s2);
    cout << s3 << endl;
    // 拷贝构造还可以写成下面这样子
    string s4 = s2;
    //初始化不够 11 > 9
    string s5("hello world", 9);
    cout << s5 << endl;
    return 0;
}

运行结果:

💫operator=(赋值函数)

为字符串指定一个新值,替换其当前内容。

这里提供了三种赋值函数:

  • 通过string对象赋值给string对象
  • 通过常量字符串赋值给string对象
  • 通过字符赋值给string对象。
#include <iostream>
#include <string>
using namespace std;
int main()
{
    //通过string对象赋值给string对象
    string s1("hello");
    string s2;
    s2 = s1;
    cout << s2 << endl;
    //通过常量字符串赋值给string对象
    s2 = "world";
    cout << s2 << endl;
    //通过字符赋值给string对象。
    s2 = 'C';
    cout << s2 << endl;
    return 0;
}

运行结果:

🌙Iterators(迭代器)

       我们在前面浅谈了迭代器,没有细说,今天有机会了😋,看着迭代器名字刁刁的,本质上还是一种遍历,像我们的for循环,典型的迭代器,咱们先看看最初我们用下标来访问遍历。

       string类是提供了[]运算符重载的,这也就意味着string可以让我们像访问数组一样利用下标来访问元素。

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s("hello world");
    for (size_t i = 0; i < s.size(); i++)
    {
        cout << s[i] << " ";
    }
    cout << endl;
    return 0;
}

运行结果:

💫利用begin和end实现迭代器

  • begin()函数返回的是string字符串的首位置
  • end()函数返回的是string字符串最后一个位置(即最后一个字符的下一个位置)

咱看看代码:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str("hello world");
    string::iterator it = str.begin();
    while (it != str.end())
    {
        cout << *it;
        ++it;
    }
    cout << endl;
    return 0;
}

运行结果:

💫范围for实现迭代器

不知道小伙伴还记得auto关键字不,auto可以推导出元素属性(int,char)

咱们看看代码:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s("hello world");
    for (auto ch : s)
    {
        cout << ch;
    }
    cout << endl;
    return 0;
}

运行结果:

💫反向迭代器

这里需要介绍一下rbegin()和rend()这两个函数,这两个函数是用来配合反向迭代器使用的。

  • rbegin()函数返回的是string字符串的最后一个有效字符
  • rend()函数返回的是string字符串的第一个字符的前一个位置。

咱们看看代码:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s("hello world");
    string::reverse_iterator rit = s.rbegin();
    while (rit != s.rend())
    {
        cout << *rit;
        rit++;
    }
    cout << endl;
    return 0;
}

运行结果:

💫const修饰的迭代器

const修饰的迭代器是不可以改变的(只能读不能写)

咱们看看代码:

void Func(const string& s)
{
    string::const_iterator cit = s.begin();
    // 读操作
    while (cit != s.end())
    {
        cout << *cit;
        cit++;
    }
    cout << endl;
    // 不能进行写操作,会报错
    // cit = s.begin();
    // while (cit != s.end())
    // {
    //     (*cit) += 1;
    //     cout << *cit;
    //     cit++;
    // }
}

🌙Capacity(容量)

学习这个板块还是比较简单的,也运用比较广泛的一个板块。

💫size和length

size函数和length函数本质上是一样的,都是计算元素总个数的。

咱们看看代码:

#include <iostream>
#include <string>
using namespace std;
int main ()
{
    string s("hello world");
    cout << s.size() << endl;
    cout << s.capacity() << endl;
    return 0;
}

运行结果:

  • size是计算字符串的元素个数,除\0
  • capacity是计算字符串的容量,也就是说定义一个string类是有初始容量的

💫reserve和resize

reserve函数是扩容函数,可以增大capacity的值,

resize其实也是扩容函数,但resize改变的是size的值,当size的值增大时自动触发string的扩容机制从而也增大了capacity的值

resize在增带size值的时候还会对没有字符的位置初始化,如果没有指定初始化内容就默认初始化为’\0’,而reserve不会进行初始化。

咱们看看代码:

#include <iostream>
#include <string>
using namespace std;
int main()
{
    string s("hello");
    cout << s << endl;
    cout << "size:" << s.size() << endl;
    cout << "capacity:" << s.capacity() << endl;
    cout << endl;
    s.reserve(25);
    cout << s << endl;
    cout << "size:" << s.size() << endl;
    cout << "capacity:" << s.capacity() << endl;
    cout << endl;
    s.resize(50, 'A');
    cout << s << endl;
    cout << "size:" << s.size() << endl;
    cout << "capacity:" << s.capacity() << endl;
    cout << endl;
    return 0;
}

运行结果:

💫max_size

max_size函数是计算字符串可以达到的最大长度。

咱们看看代码:

#include <iostream>
#include <string>
using namespace std;
int main()
{
  std::string str("Test string");
  std::cout << "size: " << str.size() << "\n";
  std::cout << "length: " << str.length() << "\n";
  std::cout << "capacity: " << str.capacity() << "\n";
  std::cout << "max_size: " << str.max_size() << "\n";
  return 0;
}

运行结果:


String类(下):https://developer.aliyun.com/article/1389439

目录
相关文章
|
8天前
|
Java 索引
java基础(13)String类
本文介绍了Java中String类的多种操作方法,包括字符串拼接、获取长度、去除空格、替换、截取、分割、比较和查找字符等。
21 0
java基础(13)String类
|
2月前
|
API 索引
String类下常用API
String类下常用API
36 1
|
2月前
for循环和String类下方法的一个练习题
for循环和String类下方法的一个练习题
45 1
|
6天前
|
安全 Java
String类-知识回顾①
这篇文章回顾了Java中String类的相关知识点,包括`==`操作符和`equals()`方法的区别、String类对象的不可变性及其好处、String常量池的概念,以及String对象的加法操作。文章通过代码示例详细解释了这些概念,并探讨了使用String常量池时的一些行为。
String类-知识回顾①
|
19天前
|
存储 安全 Java
Java——String类详解
String 是 Java 中的一个类,用于表示字符串,属于引用数据类型。字符串可以通过多种方式定义,如直接赋值、创建对象、传入 char 或 byte 类型数组。直接赋值会将字符串存储在串池中,复用相同的字符串以节省内存。String 类提供了丰富的方法,如比较(equals() 和 compareTo())、查找(charAt() 和 indexOf())、转换(valueOf() 和 format())、拆分(split())和截取(substring())。此外,还介绍了 StringBuilder 和 StringJoiner 类,前者用于高效拼接字符串,后者用于按指定格式拼接字符串
19 1
Java——String类详解
|
15天前
|
安全 Java
Java StringBuffer 和 StringBuilder 类详解
在 Java 中,`StringBuffer` 和 `StringBuilder` 用于操作可变字符串,支持拼接、插入、删除等功能。两者的主要区别在于线程安全性和性能:`StringBuffer` 线程安全但较慢,适用于多线程环境;`StringBuilder` 非线程安全但更快,适合单线程环境。选择合适的类取决于具体的应用场景和性能需求。通常,在不需要线程安全的情况下,推荐使用 `StringBuilder` 以获得更好的性能。
|
15天前
|
Java 索引
Java String 类详解
Java 中的 `String` 类用于表示不可变的字符序列,是 Java 标准库 `java.lang` 包的一部分。字符串对象一旦创建,其内容不可更改,修改会生成新对象。
|
2月前
|
Java API 索引
【Java基础面试二十四】、String类有哪些方法?
这篇文章列举了Java中String类的常用方法,如`charAt()`、`substring()`、`split()`、`trim()`、`indexOf()`、`lastIndexOf()`、`startsWith()`、`endsWith()`、`toUpperCase()`、`toLowerCase()`、`replaceFirst()`和`replaceAll()`,并建议面试时展示对这些方法的熟悉度,同时深入理解部分方法的源码实现。
【Java基础面试二十四】、String类有哪些方法?
|
9天前
|
Java 索引
java基础扫盲-String类常用的方法
java基础扫盲-String类常用的方法
|
2月前
|
存储 SQL Java
Java 系类之 Java StringBuffer类详解
这篇文章详细介绍了Java中的StringBuffer类的使用,包括其构造方法、追加字符串、替换字符、反转字符串和删除字符串的方法,并提供了相应的示例代码。