首页 > 编程语言 >C++字符串中的string类操作

C++字符串中的string类操作

时间:2024-09-08 18:23:13浏览次数:6  
标签:string C++ C语言 内存 字符串 Rust

愿我如星君如月,夜夜流光相皎洁。

                                                      ——《车逍遥篇》【宋】范成大

目录

正文:

主要特点:

基本操作:

 代码演示:

总结:


今天我们接着上次的章节继续,这次我们来说一个为解决上个方法的缺陷而诞生的方法string类。

C++字符串操作中的陷阱

正文:

我们先来看一看什么是C++,还有关于它的定义:

在C++中,string是一个非常重要的类,用于处理文本数据。它是标准模板库(Standard Template Library, STL)的一部分,定义在头文件<string>中。与C语言中的字符数组(如char[])相比,string类提供了更丰富的功能和更高的安全性。

主要特点:
  1. 动态内存管理string类自动管理内存,不需要手动分配和释放内存,减少了内存泄漏的风险。
  2. 丰富的成员函数string类提供了大量的成员函数来执行各种字符串操作,如连接、查找、比较、替换、插入和删除等。
  3. 边界检查:与C语言中的字符数组相比,string类在访问越界时会抛出异常或返回错误,提高了程序的安全性。(正好可以解决C语言中的字符数组带来的缺陷)
基本操作:
  1. 当然在开始之前我们需要提前写入这个类的头文件:include<string>
  2. 定义字符串然后进行初始化。
  3. 同样也可以赋值,添加元素到字符串中。
  4. 访问字符串的元素,还可以对其进行修改。
  5. 比较字符串之间的大小,字符串的长度大小,然后输出结果。(<  >   ==  !=  >=  <=)。
  6. 拼接字符串或者拷贝字符串。

 代码演示:

include<iostream>
using namespace std;
include<string>
include<string.h>
int main()
{
string n;
//三种初始化方式
string n="li hua";
string s("my name");
string s=string("name");
利用字符和计数来初始化x(输出结果是 8个x)
string x('h',8);


两种求长度的结果是一样的
cout<<n.size()<<endl;
cout<<n.length()<<endl;
设计的字符串的预存大小
cout<<n.capacity()<<endl;

下面就是两个字符数组的大小比较,之前讲到的关系运算符都可以用
cout<<(n==s)<<endl;
cout<<(n<s)<<endl;
cout<<(n!=s)<,endl;

转换为C语言风格的字符串,利用c_str()的方式来转换
const char*c_str1=n.c_str();
cout<<"转换后的字符串"<<c_str<<endl;

随机访问(获取字符串中的某个元素)
string a="mine";
cout<<s[0]<<endl;//类似数组的访问方式

指定访问:
char ch = n[0]; // 使用下标访问,但注意越界  
char firstChar = n.front(); // 获取第一个字符  
char lastChar = n.back(); // 获取最后一个字符

字符串拷贝
string s=n;直接链接两个字符串

字符串的拼接:
string b="is yours";
string c="peter";
string d=c+b;
c+=b;这一步和上面的那步相似,只不过是简化的方式;而且完整的写法是:c=c+b;这里省略了一步。 

for(int i=0;i<n.size; i++)
{
cout<<n[i]<<endl;
}

for(int i=0;i<d.size; i++)
{
cout<<n[i]<<endl;
}

return 0;
}

总结:

string结合了C++的新特性。

使用起来比原始的C语言的方法更加的安全和方便。

对比性能要求不高的程序可以使用。

新语言的分享:

然后我就要说一下最近关注到的新语言rust,这个语言目前是最有希望可以去达到C++成就的语言,因为这个语言在开发的时候就会避免C语言中经常出现的一些安全型问题。

Rust 是一种系统编程语言,它注重安全性、速度和并发性。Rust 旨在提供与 C 和 C++ 相当的性能,同时确保内存安全,这是通过所有权、借用和生命周期的概念来实现的。Rust 旨在提供零成本抽象,意味着在运行时使用 Rust 编写的程序不会比使用传统系统编程语言编写的程序慢。

以下是 Rust 的一些关键特性:

  1. 所有权系统:Rust 通过所有权系统管理内存,不需要垃圾回收。每个值都有一个所有者,当所有者离开作用域时,其资源会被释放。这个机制避免了内存泄漏和其他常见的内存错误。
  2. 借用:Rust 提供了借用的概念,允许你使用引用而不取得所有权。这样,函数可以在不拥有数据的情况下读取数据(不可变借用),或者同时读写数据(可变借用),但同时保证内存安全。
  3. 并发:Rust 的并发模型强调线程安全。Rust 的类型系统和所有权规则确保了数据竞争是不可能的,因此可以更轻松地编写安全的并发代码。
  4. 零成本抽象:Rust 在编译时不增加任何运行时开销。这意味着,开发者可以使用高级的抽象来编写代码,而不会影响性能。
  5. 包管理器和构建工具:Rust 有一个内置的包管理器和构建系统,名为 Cargo,它简化了依赖管理和构建过程。

Rust 适合用在需要高性能和高并发的场合,例如开发操作系统、文件系统、游戏引擎、网络服务器等。

 

标签:string,C++,C语言,内存,字符串,Rust
From: https://blog.csdn.net/2301_81280642/article/details/141998764

相关文章

  • 图论篇--代码随想录算法训练营第五十三天打卡| 110. 字符串接龙,105.有向图的完全可达
    110.字符串接龙题目链接:110.字符串接龙题目描述:字典strList中从字符串beginStr和endStr的转换序列是一个按下述规格形成的序列: 序列中第一个字符串是beginStr。序列中最后一个字符串是endStr。 每次转换只能改变一个字符。 转换过程中的中间字符串必须是字典......
  • 大二上 C++高级程序设计笔记(1) 栈和c++对c的补充 20240908
    Q1:什么是static类的储存变量?A1:在C++中,static关键字可以用于类成员变量和成员函数,以改变其作用域和生命周期。当static用于类的成员变量时,它具有以下特性:全局唯一性:静态成员变量不属于任何特定的对象实例,而是属于类本身。这意味着无论创建多少个类的对象,静态成员变量都只有......
  • C语言练习题--一维、二维字符串数组
    1.下列对C语言字符数组的描述中错误的是(D) A.字符数组可以存放字符串B.字符数组中的字符串可以整体输入、输出C.不可以用关系运算符对字符数组中的字符串进行比较D.可以在赋值语句中通过赋值运算符"="对字符数组整体赋值分析:D只能逐个字符进行复制或者利用字......
  • Python中如何实现字符串的查询和替换?
    在Python中,字符串的查询和替换是字符串处理中的基础且常用的操作。Python提供了多种方法来实现这些功能,包括使用内置的方法、正则表达式等。一、字符串的查询字符串的查询通常指的是在字符串中查找子串的位置、出现的次数,或者检查子串是否存在等。Python的字符串对象提供了多......
  • 844. 比较含退格的字符串
    c++字符串还是不太熟练classSolution{public:boolbackspaceCompare(strings,stringt){returndealString(s)==dealString(t);}private:stringdealString(conststring&s){stringret;intcurIndex=0;while(......
  • 【C++ Primer Plus习题】12.6
    1大家好,这里是国中之林!❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←问题:解答:main.cpp#include<iostream>#include<cstdlib>#include<ctime>#include"queue.h"using......
  • 【C++ Primer Plus习题】12.5
    大家好,这里是国中之林!❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←问题:解答:main.cpp#include<iostream>#include<cstdlib>#include<ctime>#include"queue.h......
  • 【C++11及其特性】智能指针——shared_ptr
    大家好,这里是国中之林!❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看←shared_ptr目录一.共享性智能指针二.shared_ptr的共享原理三.shared_ptr的构造函数1.普通的2.数组的3.带删除器......
  • 【C++】智能指针
    目录1.智能指针简介2. std::unique_ptr2.1.特点2.2.使用示例3. std::shared_ptr3.1.特点3.2.使用示例4. std::weak_ptr4.1.特点4.2.使用示例5.使用智能指针的注意事项5.1.选择合适的智能指针类型5.2.避免循环引用5.3.谨慎使用自定义删除器5.4.注......
  • Linux 下 C/C++ 程序编译的过程
    目录一、GCC工具链二、编译过程1、预处理2、编译3、汇编4、链接本文将介绍如何将C/C++语言编写的程序转换成为处理器能够执行的二进制代码的过程,包括四个步骤:预处理(Preprocessing)编译(Compilation)汇编(Assembly)链接(Linking)。在此之前,首先来看一下GCC工具链。......