深入探讨string类的奥秘

标题:深入探索C++ String类的奥秘

一、String类简介

在C++编程中,字符串处理是非常常见的一种操作。C++标准库为我们提供了一种名为String的类,用于处理字符串。String类在头文件中定义,它提供了许多成员函数和友元函数,使得我们在处理字符串时更加方便高效。

二、String类的基本操作

  1. 初始化

在创建String对象时,我们可以使用以下几种方式来初始化:

#include <iostream>
#include <string>int main() {std::string str1;                     // 空字符串std::string str2("Hello, World!");    // 用C字符串初始化std::string str3(str2);                // 用另一个String对象初始化std::string str4(5, 'a');              // 用字符重复初始化("aaaaa")return 0;
}
  1. 赋值

String类提供了赋值操作符(=)和assign()函数,用于将一个字符串赋值给另一个字符串。

#include <iostream>
#include <string>int main() {std::string str1("Hello");std::string str2;str2 = str1;            // 使用赋值操作符str2.assign(str1);      // 使用assign()函数return 0;
}
  1. 访问和修改

我们可以通过索引操作符[]来访问字符串中的字符,并通过赋值操作符=来修改字符。

#include <iostream>
#include <string>int main() {std::string str("Hello");str[2] = 'o';std::cout << str << std::endl;  // 输出 "Helo"return 0;
}
  1. 连接

我们可以使用+操作符或append()、insert()函数来连接字符串。

#include <iostream>
#include <string>int main() {std::string str1("Hello");std::string str2("World");std::string str3 = str1 + " " + str2;    // 使用+操作符str1.append(str2);                        // 使用append()函数str1.insert(6, " ");                      // 使用insert()函数return 0;
}
  1. 比较

我们可以使用==操作符或compare()函数来比较字符串。

#include <iostream>
#include <string>int main() {std::string str1("Hello");std::string str2("World");if (str1 == str2) {std::cout << "Strings are equal" << std::endl;}int result = str1.compare(str2);if (result < 0) {std::cout << "str1 is less than str2" << std::endl;} else if (result > 0) {std::cout << "str1 is greater than str2" << std::endl;} else {std::cout << "str1 is equal to str2" << std::endl;}return 0;
}

三、String类的高级操作

除了上述基本操作外,String类还提供了许多高级操作,如查找、替换、分割等。这里我们简单介绍几个常用的操作:

  1. 查找

我们可以使用find()函数来查找子串在字符串中的位置。find()函数返回的是子串的第一个字符在字符串中的位置,如果没有找到则返回std::string::npos。

#include <iostream>
#include <string>int main() {std::string str("Hello, World!");size_t pos = str.find(", ");if (pos != std::string::npos) {std::cout << "Found ', ' at position " << pos << std::endl;}return 0;
}
  1. 替换

我们可以使用replace()函数来替换字符串中的子串。replace()函数需要指定子串的起始位置、子串的长度以及替换后的子串。

#include <iostream>
#include <string>int main() {std::string str("Hello, World!");str.replace(7, 5, "Earth");std::cout << str << std::endl;  // 输出 "Hello, Earth!"return 0;
}
  1. 分割

我们可以使用substr()函数来从字符串中提取子串。substr()函数需要指定子串的起始位置和长度。

#include <iostream>
#include <string>int main() {std::string str("Hello, World!");std::string substr = str.substr(0, 5);  // 提取前5

当然可以。除了上述提到的String类的基本操作和高级操作之外,我们还可以深入了解以下几个方面:

四、字符串的大小和容量

  1. length()和size()

length()和size()函数都可以用来获取字符串的大小。它们返回的是字符串中字符的数量。在大多数情况下,这两个函数可以互换使用。

#include <iostream>
#include <string>int main() {std::string str("Hello, World!");std::cout << "String length: " << str.length() << std::endl;std::cout << "String size: " << str.size() << std::endl;return 0;
}
  1. capacity()

capacity()函数可以用来获取字符串的容量,即字符串当前分配的内存空间。当字符串增长时,其容量也会相应增加。

#include <iostream>
#include <string>int main() {std::string str;str.reserve(100);  // 预留100个字符的空间 std::cout << "String capacity: " << str.capacity() << std::endl;return 0;
}

五、字符串的迭代器

String类提供了两种类型的迭代器:const_iterator和iterator。const_iterator用于读取字符串中的字符,而iterator则允许读取和修改字符串中的字符。

#include <iostream>
#include <string>int main() {std::string str("Hello, World!");for (std::string::const_iterator it = str.begin(); it != str.end(); ++it) {std::cout << *it;}std::cout << std::endl;return 0;
}

六、字符串与文件操作

我们可以使用fstream库中的ifstream和ofstream类来实现字符串与文件之间的读写操作。

  1. 读取文件内容到字符串
#include <iostream>
#include <fstream>
#include <string>int main() {std::ifstream file("example.txt");std::string str((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());std::cout << "File content: " << str << std::endl;return 0;
}
  1. 将字符串内容写入文件
#include <iostream>
#include <fstream>
#include <string>int main() {std::string str("Hello, World!");std::ofstream file("example.txt");file << str;return 0;
}

七、字符串与异常处理

String类的一些操作可能会抛出异常,如当字符串容量不足时,尝试插入过多字符会抛出std::length_error异常。我们可以使用try-catch语句来处理这些异常。

#include <iostream>
#include <string>
#include <exception>int main() {try {std::string str(1000, 'a');} catch (std::length_error& e) {std::cerr << "Caught exception: " << e.what() << std::endl;}return 0;
}

到这里,我们已经对C++中的String类有了更深入的了解。希望本文能帮助你更好地掌握和运用String类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型日报2024-04-07

大模型日报 2024-04-07 大模型资讯 EURUS&#xff1a;针对推理优化的大型语言模型套件&#xff0c;取得开源模型多项基准测试的最先进成果 摘要: EURUS是一套针对推理能力进行优化的大型语言模型&#xff08;LLMs&#xff09;&#xff0c;在多项多样化的基准测试中取得了最先进…

算法练习----力扣每日一题------7

原题链接 1483. 树节点的第 K 个祖先 - 力扣&#xff08;LeetCode&#xff09; 题目解析 要求编写一个TreeAncestor类&#xff0c;需要为其写两个函数。该类是一个无规律的多叉树&#xff0c;多叉树的父节点一定是0号节点 1. TreeAncestor(int n, vector<int>&…

Android Hal service compatibility matrix

hal service 1&#xff09;增加声明xml文件 <manifest version"1.0" type"framework"><hal format"aidl"><name>ltd.faw.native_log_service</name><interface><name>INativeLogServiceInterface</name…

学习vue3第十四节 Teleport 内置组件介绍

<Teleport></Teleport> 作用目的&#xff1a; 用于将指定的组件或者元素传送到指定的位置&#xff1b; 通常是自定义的全局通用弹窗&#xff0c;绑定到 body 上&#xff0c;而不是在当前元素上面&#xff1b; 使用方法&#xff1a; 接收两个参数 to: 要将目标传…

MySQL数据库——4、数据类型

在 MySQL 数据库中&#xff0c;数据类型用于定义表中列&#xff08;字段&#xff09;可以存储的数据类型。MySQL 提供了丰富的数据类型&#xff0c;可以满足不同类型数据的存储需求。 MySQL 中一些常用的数据类型及其用途&#xff1a; 整数类型&#xff08;Integer Types&…

图片切换案例

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>图片切换案例</title> </head> …

Day105:代码审计-PHP原生开发篇SQL注入数据库监控正则搜索文件定位静态分析

目录 代码审计-学前须知 Bluecms-CNVD-1Day-常规注入审计分析 emlog-CNVD-1Day-常规注入审计分析 emlog-CNVD-1Day-2次注入审计分析 知识点&#xff1a; 1、PHP审计-原生态开发-SQL注入&语句监控 2、PHP审计-原生态开发-SQL注入&正则搜索 3、PHP审计-原生态开发-SQ…

LeetCode-热题100:55. 跳跃游戏

题目描述 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&…

Java文件流操作

一、文件创建和删除 public static void main(String[] args) throws IOException {File file new File("..\\hello-world.txt");//..表示在上机目录下创建hello-world.txtSystem.out.println(file.getPath());//返回当前相对路径System.out.println(file.getCanoni…

vue项目 设置浏览器地址栏图标及名称

在vue项目中&#xff0c;怎样设置浏览器tab图标及名称呢&#xff1f; 方案一 1.静态配置vue项目ico 1.1将需要展示的ico放到项目文件中 1.2在项目根目录public文件中的index.html添加如下代码 <link rel"icon" href"<% BASE_URL %>favicon.ico"…

联邦学习目前面临的挑战以及解决方案

学习目标&#xff1a; 联邦学习目前面临的挑战以及解决方案 学习内容&#xff1a; 联邦学习是一种新兴的人工智能基础技术&#xff0c;它在保障大数据交换时的信息安全、保护终端数据和个人数据隐私、保证合法合规的前提下&#xff0c;在多参与方或多计算结点之间开展高效率的…

224.0.0.1到224.0.0.9的IP地址

224.0.0.1到224.0.0.9的IP地址属于D类组播地址&#xff0c;具体含义如下&#xff1a; 224.0.0.1&#xff1a;代表本子网中的所有系统&#xff08;All Systems on this Subnet&#xff09;&#xff0c;用于向该子网上的所有主机包括路由器发送信息。224.0.0.2&#xff1a;代表本…

什么是TLB

TLB&#xff0c;全称为Translation Lookaside Buffer&#xff0c;即旁路转换缓冲或地址转换后备缓冲&#xff0c;用于加速虚拟地址到物理地址的转换过程。它是访问速度比内存快很多的高速缓存&#xff0c;用于存放最近访问的页表项的副本。在现代计算机系统中&#xff0c;使用虚…

Java 组合模式

Java设计模式 - 组合模式 组合模式是结构型模式&#xff0c;因为它创建了一组对象的树结构。 组合模式将一组对象视为单个对象。 组合模式使用一个类来表示树结构。 在组合模式中&#xff0c;我们创建一个包含自己对象的类的组。 例子 以下代码使用Employee类来演示组合模…

(学习日记)2024.04.03:UCOSIII第三十一节:信号量函数接口讲解

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

c++的学习之路:13、vector(2)

本章主要是模拟实现vector&#xff0c;文章末附上代码&#xff0c;和源码。 目录 一、STL源码 二、构造与析构 三、迭代器与【】、size、capacity、empty 四、reserve与resize 五、push_back与pop_back 六、insert与erase 七、测试 1 八、代码 九、思维导图 一、STL源…

FJSP:蜣螂优化算法( Dung beetle optimizer, DBO)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

一、柔性作业车间调度问题 柔性作业车间调度问题&#xff08;Flexible Job Shop Scheduling Problem&#xff0c;FJSP&#xff09;&#xff0c;是一种经典的组合优化问题。在FJSP问题中&#xff0c;有多个作业需要在多个机器上进行加工&#xff0c;每个作业由一系列工序组成&a…

2024.4.3-day08-CSS 盒子模型(溢出显示、伪元素)

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 作业 2024.4.3-学习笔记css溢出显示单行文本溢出显示省略号多行文本溢出显示省…

多态.Java

&#xff08;1&#xff09;什么是多态&#xff1f; 同类型的对象&#xff0c;表现出不同的形态。前者指父类&#xff0c;后者指不同的子类 说简单点&#xff0c;就是父类的同一种方法&#xff0c;可以在不同子类中表现出不同的状态&#xff0c;或者说在不同子类中可以实现不同…

UVA247 Calling Circles 解题报告

UVA247 Calling Circles 解题报告 题目链接 https://vjudge.net/problem/UVA-247 题目大意 如果两个人相互打电话&#xff08;直接或间接&#xff09;&#xff0c;则说他们在同一个电话圈里。例如&#xff0c;a打给b&#xff0c;b打给c&#xff0c;c打给d&#xff0c;d打给a…