【掌握C++ string 类】——【高效字符串操作】的【现代编程艺术】

专栏:C++学习笔记 

上一篇:【C++】——【 STL简介】——【详细讲解】

1. 为什么要学习 string 类?

1.1 C 语言中的字符串

在 C 语言中,字符串是以 '\0' 结尾的字符集合。如下所示:

#include <stdio.h>int main() {char str[] = "Hello, World!";printf("%s\n", str);return 0;
}

需要记住的知识点:

  1. C 风格字符串是以 '\0' 结尾的字符数组。
  2. 使用 char 类型数组表示字符串。
  3. C 库提供的字符串操作函数与字符串本身是分离的。

小李的理解 C 语言中的字符串处理很基础,使用字符数组来存储,但需要手动管理内存,很容易出错。

1.2 两个面试题

字符串转整形数字

题目描述:将字符串表示的数字转换为整形数字,例如将 "12345" 转换为 12345

实现方法:可以使用 std::stoi 函数将字符串转换为整形数字。

示例代码

#include <iostream>
#include <string>int main() {std::string str = "12345";try {int num = std::stoi(str); // 将字符串转换为整形数字std::cout << "字符串 \"" << str << "\" 转换为整形数字: " << num << std::endl;} catch (const std::invalid_argument& e) {std::cout << "无效的输入: " << str << std::endl;} catch (const std::out_of_range& e) {std::cout << "输入超出范围: " << str << std::endl;}return 0;
}

 

需要记住的知识点

  1. 使用 std::stoi 函数将字符串转换为整形数字。
  2. std::stoi 在转换失败时会抛出异常,可以根据需要进行异常处理。

小李的理解

使用 std::stoi 函数非常方便,可以直接将表示数字的字符串转换为整形数字。这在处理用户输入或文件读取的数据时非常有用。

字符串相加

题目描述:将两个字符串拼接成一个字符串,例如将 "Hello, ""World!" 拼接成 "Hello, World!"

实现方法:可以使用 + 运算符或者 append 方法将两个字符串拼接。

示例代码

#include <iostream>
#include <string>int main() {std::string str1 = "Hello, ";std::string str2 = "World!";// 方法1:使用 + 运算符拼接std::string result1 = str1 + str2;std::cout << "使用 + 运算符拼接: " << result1 << std::endl;// 方法2:使用 append 方法拼接std::string result2 = str1;result2.append(str2);std::cout << "使用 append 方法拼接: " << result2 << std::endl;return 0;
}

需要记住的知识点

  1. 使用 + 运算符可以方便地将两个字符串拼接。
  2. 使用 append 方法也可以实现字符串拼接,适用于更复杂的字符串操作。

小李的理解

C++ 中提供了多种字符串拼接方法,+ 运算符简单直观,适合拼接固定数量的字符串。append 方法则适合在循环或更复杂的逻辑中使用。

详细运行结果分析

字符串转整形数字

#include <iostream>
#include <string>int main() {std::string str = "12345";try {int num = std::stoi(str); // 将字符串转换为整形数字std::cout << "字符串 \"" << str << "\" 转换为整形数字: " << num << std::endl;} catch (const std::invalid_argument& e) {std::cout << "无效的输入: " << str << std::endl;} catch (const std::out_of_range& e) {std::cout << "输入超出范围: " << str << std::endl;}return 0;
}

异常处理

  • std::invalid_argument:如果输入的字符串不是一个有效的整数,则会抛出此异常。
  • std::out_of_range:如果输入的字符串表示的整数超出了整形数字的范围,则会抛出此异常。

需要注意的地方std::stoi 在处理非常大的数字时,可能会抛出 std::out_of_range 异常。

补充代码:处理无效输入和超出范围的情况

#include <iostream>
#include <string>int main() {std::string str1 = "12345";std::string str2 = "12345abc";std::string str3 = "99999999999999999999999999";try {int num1 = std::stoi(str1); // 正确转换std::cout << "字符串 \"" << str1 << "\" 转换为整形数字: " << num1 << std::endl;} catch (const std::invalid_argument& e) {std::cout << "无效的输入: " << str1 << std::endl;} catch (const std::out_of_range& e) {std::cout << "输入超出范围: " << str1 << std::endl;}try {int num2 = std::stoi(str2); // 转换失败std::cout << "字符串 \"" << str2 << "\" 转换为整形数字: " << num2 << std::endl;} catch (const std::invalid_argument& e) {std::cout << "无效的输入: " << str2 << std::endl;} catch (const std::out_of_range& e) {std::cout << "输入超出范围: " << str2 << std::endl;}try {int num3 = std::stoi(str3); // 转换失败std::cout << "字符串 \"" << str3 << "\" 转换为整形数字: " << num3 << std::endl;} catch (const std::invalid_argument& e) {std::cout << "无效的输入: " << str3 << std::endl;} catch (const std::out_of_range& e) {std::cout << "输入超出范围: " << str3 << std::endl;}return 0;
}

 字符串相加

#include <iostream>
#include <string>int main() {std::string str1 = "Hello, ";std::string str2 = "World!";// 方法1:使用 + 运算符拼接std::string result1 = str1 + str2;std::cout << "使用 + 运算符拼接: " << result1 << std::endl;// 方法2:使用 append 方法拼接std::string result2 = str1;result2.append(str2);std::cout << "使用 append 方法拼接: " << result2 << std::endl;return 0;
}

细节分析

  1. 使用 + 运算符拼接时,会生成一个新的字符串对象。
  2. 使用 append 方法拼接时,会在原有字符串对象上进行修改,适合在需要多次拼接的情况下使用以减少不必要的对象创建。

补充代码:使用多次拼接的情况

#include <iostream>
#include <string>int main() {std::string str1 = "Hello, ";std::string str2 = "World!";std::string str3 = " How are you?";// 多次使用 + 运算符拼接std::string result1 = str1 + str2 + str3;std::cout << "多次使用 + 运算符拼接: " << result1 << std::endl;// 多次使用 append 方法拼接std::string result2 = str1;result2.append(str2).append(str3);std::cout << "多次使用 append 方法拼接: " << result2 << std::endl;return 0;
}

 

通过这些详细的代码示例和运行结果分析,相信你能更好地理解如何在 C++ 中进行字符串转整形数字和字符串相加操作,并在实际应用中灵活使用这些方法。

2. 标准库中的 string

2.1 string 类的基本介绍

文档介绍

  1. string 是一个表示字符序列的类。
  2. string 类提供了丰富的接口,类似于标准容器(如 vector),但还添加了专门用于操作单字节字符字符串的设计特性。
  3. stringbasic_string 模板类的一个实例,使用 charchar_traitsallocator 作为模板参数。
  4. string 类独立于编码处理字节。

需要记住的知识点

  1. string 类表示字符序列。
  2. 提供类似于标准容器的接口。
  3. string 实际上是 basic_string<char, char_traits, allocator> 的实例。

小李的理解string 类封装了字符串操作,提供了很多方便的函数,不需要我们手动管理内存。

示例代码

#include <iostream>
#include <string>int main() {std::string str = "Hello, World!";std::cout << str << std::endl;return 0;
}

2.2 string 类的常用接口

构造函数

string():构造一个空的 string 对象。

#include <iostream>
#include <string>int main() {std::string s;std::cout << "Empty string: '" << s << "'" << std::endl;return 0;
}

 string(const char* s):用 C 风格字符串构造 string 对象。

#include <iostream>
#include <string>int main() {std::string s("Hello, World!");std::cout << s << std::endl;return 0;
}

string(size_t n, char c):构造一个包含 n 个字符 cstring 对象。 

#include <iostream>
#include <string>int main() {std::string s(10, 'a');std::cout << s << std::endl;return 0;
}

string(const string& s):拷贝构造函数,用另一个 string 对象构造新对象。

#include <iostream>
#include <string>int main() {std::string s1 = "Hello";std::string s2(s1);std::cout << s2 << std::endl;return 0;
}

 

容量操作

size() / length():返回字符串的有效字符长度。

#include <iostream>
#include <string>int main() {std::string s = "Hello";std::cout << "Size: " << s.size() << std::endl;std::cout << "Length: " << s.length() << std::endl;return 0;
}

capacity():返回字符串的总容量。

#include <iostream>
#include <string>int main() {std::string s = "Hello";std::cout << "Capacity: " << s.capacity() << std::endl;return 0;
}

 empty():检测字符串是否为空,空则返回 true,否则返回 false

#include <iostream>
#include <string>int main() {std::string s;if (s.empty()) {std::cout << "String is empty" << std::endl;}return 0;
}

clear():清空字符串中的有效字符。

#include <iostream>
#include <string>int main() {std::string s = "Hello";s.clear();std::cout << "String after clear: '" << s << "'" << std::endl;return 0;
}

reserve(size_t res_arg=0):为字符串预留空间,不改变有效字符个数。

#include <iostream>
#include <string>int main() {std::string s;s.reserve(100);std::cout << "Reserved capacity: " << s.capacity() << std::endl;return 0;
}

resize(size_t n) / resize(size_t n, char c):将有效字符个数改为 n,多出的空间用字符 c 填充。

#include <iostream>
#include <string>int main() {std::string s = "Hello";s.resize(10, 'x');std::cout << "Resized string: " << s << std::endl;return 0;
}

访问及遍历操作

operator[]:返回指定位置的字符。

#include <iostream>
#include <string>int main() {std::string s = "Hello";std::cout << "Character at index 1: " << s[1] << std::endl;return 0;
}

begin() / end():返回字符串的起始迭代器和结束迭代器。

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

 rbegin() / rend():返回反向迭代器。

#include <iostream>
#include <string>int main() {std::string s = "Hello";for (auto it = s.rbegin(); it != s.rend(); ++it) {std::cout << *it << ' ';}std::cout << std::endl;return 0;
}

 范围 for 循环:C++11 引入的简洁遍历方式。

#include <iostream>
#include <string>int main() {std::string s = "Hello";for (char c : s) {std::cout << c << ' ';}std::cout << std::endl;return 0;
}
修改操作

1.push_back(char c):在字符串末尾添加字符 c

#include <iostream>
#include <string>int main() {std::string s = "Hello";s.push_back('!');std::cout << s << std::endl;return 0;
}

2.append(const string& str):在字符串末尾追加字符串 str。 

#include <iostream>
#include <string>int main() {std::string s = "Hello";s.append(" World");std::cout << s << std::endl;return 0;
}

3.operator+=:在字符串末尾追加字符串。

#include <iostream>
#include <string>int main() {std::string s = "Hello";s += " World";std::cout << s << std::endl;return 0;
}

 

4.c_str():返回 C 风格字符串。

#include <iostream>
#include <string>int main() {std::string s = "Hello";const char* c_str = s.c_str();std::cout << c_str << std::endl;return 0;
}

 

5.find(char c, size_t pos=0):从指定位置开始查找字符 c

#include <iostream>
#include <string>int main() {std::string s = "Hello";size_t pos = s.find('l');if (pos != std::string::npos) {std::cout << "Character 'l' found at position: " << pos << std::endl;} else {std::cout << "Character not found" << std::endl;}return 0;
}

 

6.rfind(char c, size_t pos=npos):从指定位置开始反向查找字符 c

#include <iostream>
#include <string>int main() {std::string s = "Hello";size_t pos = s.rfind('l');if (pos != std::string::npos) {std::cout << "Character 'l' found at position: " << pos << std::endl;} else {std::cout << "Character not found" << std::endl;}return 0;
}

 

7.substr(size_t pos=0, size_t n=npos):返回从指定位置开始的子字符串。 

#include <iostream>
#include <string>int main() {std::string s = "Hello, World!";std::string sub = s.substr(7, 5); // 从第7个位置开始,取5个字符std::cout << "Substring: " << sub << std::endl;return 0;
}

非成员函数

1.operator+:字符串拼接。

#include <iostream>
#include <string>int main() {std::string s1 = "Hello";std::string s2 = " World";std::string s3 = s1 + s2;std::cout << s3 << std::endl;return 0;
}

 

2.operator>>:输入运算符重载。 

#include <iostream>
#include <string>int main() {std::string s;std::cout << "Enter a string: ";std::cin >> s; // 从输入读取字符串,遇到空格结束std::cout << "You entered: " << s << std::endl;return 0;
}

3.operator<<:输出运算符重载。 

#include <iostream>
#include <string>int main() {std::string s = "Hello, World!";std::cout << s << std::endl; // 输出: Hello, World!return 0;
}

4.getline:读取一行字符串。 

#include <iostream>
#include <string>int main() {std::string line;std::cout << "Enter a line of text: ";std::getline(std::cin, line); // 从输入读取一行字符串std::cout << "You entered: " << line << std::endl;return 0;
}

5.关系运算符:字符串比较。 

#include <iostream>
#include <string>int main() {std::string s1 = "Hello";std::string s2 = "World";if (s1 < s2) {std::cout << s1 << " is less than " << s2 << std::endl;} else {std::cout << s1 << " is not less than " << s2 << std::endl;}return 0;
}

3. 扩展阅读

需要记住的知识点

  1. string 类是 basic_string 模板类的实例。
  2. 提供丰富的接口,简化字符串操作。
  3. 内存管理由 string 类自动处理,避免了手动管理内存的复杂性和风险。

小李的理解 string 类让字符串操作变得简单而安全。通过理解 string 类的各种接口和功能,可以更高效地编写 C++ 程序。

示例代码

找字符串中第一个只出现一次的字符

#include <iostream>
#include <string>class Solution {
public:int firstUniqChar(const std::string& s) {int count[256] = {0};for (char c : s) {count[c]++;}for (size_t i = 0; i < s.size(); ++i) {if (count[s[i]] == 1) {return i;}}return -1;}
};int main() {Solution solution;std::string s = "leetcode";int index = solution.firstUniqChar(s);if (index != -1) {std::cout << "The first unique character is at index: " << index << std::endl;} else {std::cout << "No unique character found" << std::endl;}return 0;
}

 

验证一个字符串是否是回文 

#include <iostream>
#include <string>
#include <algorithm>class Solution {
public:bool isPalindrome(const std::string& s) {std::string filtered;for (char c : s) {if (isalnum(c)) {filtered += tolower(c);}}std::string reversed = filtered;std::reverse(reversed.begin(), reversed.end());return filtered == reversed;}
};int main() {Solution solution;std::string s = "A man, a plan, a canal: Panama";bool result = solution.isPalindrome(s);if (result) {std::cout << "\"" << s << "\" is a palindrome" << std::endl;} else {std::cout << "\"" << s << "\" is not a palindrome" << std::endl;}return 0;
}

总结 

1. 为什么要学习 string 类?

C 语言中的字符串

  • C 风格字符串是以 '\0' 结尾的字符数组,使用 char 类型数组表示。
  • C 库提供的字符串操作函数与字符串本身是分离的,需要手动管理内存,容易出错。

字符串转整形数字

  • 使用 std::stoi 函数可以方便地将字符串转换为整形数字。
  • std::stoi 在转换失败时会抛出异常,可以进行异常处理。

字符串相加

  • 使用 + 运算符和 append 方法可以轻松实现字符串拼接。
  • + 运算符适合拼接固定数量的字符串,append 方法适合在循环或复杂逻辑中使用。

2. 标准库中的 string

基本介绍

  • string 类表示字符序列,提供类似于标准容器的接口。
  • string 实际上是 basic_string<char, char_traits, allocator> 的实例,封装了字符串操作,提供方便的函数和自动内存管理。

常用接口

构造函数
  • string():构造一个空的 string 对象。
  • string(const char* s):用 C 风格字符串构造 string 对象。
  • string(size_t n, char c):构造一个包含 n 个字符 cstring 对象。
  • string(const string& s):拷贝构造函数,用另一个 string 对象构造新对象。
容量操作
  • size() / length():返回字符串的有效字符长度。
  • capacity():返回字符串的总容量。
  • empty():检测字符串是否为空。
  • clear():清空字符串中的有效字符。
  • reserve(size_t res_arg=0):为字符串预留空间。
  • resize(size_t n) / resize(size_t n, char c):将有效字符个数改为 n,多出的空间用字符 c 填充。
访问及遍历操作
  • operator[]:返回指定位置的字符。
  • begin() / end():返回字符串的起始迭代器和结束迭代器。
  • rbegin() / rend():返回反向迭代器。
  • 范围 for 循环:C++11 引入的简洁遍历方式。
修改操作
  • push_back(char c):在字符串末尾添加字符 c
  • append(const string& str):在字符串末尾追加字符串 str
  • operator+=:在字符串末尾追加字符串。
  • c_str():返回 C 风格字符串。
  • find(char c, size_t pos=0):从指定位置开始查找字符 c
  • rfind(char c, size_t pos=npos):从指定位置开始反向查找字符 c
  • substr(size_t pos=0, size_t n=npos):返回从指定位置开始的子字符串。
非成员函数
  • operator+:字符串拼接。
  • operator>>:输入运算符重载。
  • operator<<:输出运算符重载。
  • getline:读取一行字符串。
  • 关系运算符:字符串比较。

3. 扩展阅读

  • string 类是 basic_string 模板类的实例,提供丰富的接口,简化字符串操作。
  • 内存管理由 string 类自动处理,避免了手动管理内存的复杂性和风险。

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

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

相关文章

Postman工具基本使用

一、安装及基本使用 安装及基本使用参见外网文档&#xff1a;全网最全的 postman 工具使用教程_postman使用-CSDN博客 建议版本&#xff1a;11以下&#xff0c;比如10.x.x版本。11版本以后貌似是必须登录使用 二、禁止更新 彻底禁止postman更新 - 简书 host增加&#xff1…

【Linux进阶】Linux目录配置,FHS

在了解了每个文件的相关种类与属性&#xff0c;以及了解了如何修改文件属性与权限的相关信息后&#xff0c;再来要了解的就是&#xff0c;为什么每个Linux发行版它们的配置文件、执行文件、每个目录内放置的东西&#xff0c;其实都差不多&#xff1f;原来是有一套标准依据&…

uniapp+vue3+echarts编写微信小程序

uniappvue3echarts编写微信小程序 记录一下自己uniapp使用echarts开发图表&#xff0c;之前网上找了很多&#xff0c;本以为应该是挺常见的使用方式&#xff0c;没想到引入之路居然这么坎坷&#xff0c;在Dcloud插件市场&#xff0c;使用最多的&#xff1a;echarts-for-wx 但是…

用Python制作动态钟表:实时显示时间的动画

文章目录 引言准备工作前置条件 代码实现与解析导入必要的库初始化Pygame绘制钟表函数主循环 完整代码 引言 动态钟表是一种直观且实用的UI元素&#xff0c;能够实时显示当前时间。在这篇博客中&#xff0c;我们将使用Python创建一个动态钟表&#xff0c;通过利用Pygame库来实…

React、JSX简介、渲染列表、基础和复杂的条件渲染

目录 一、简介 1、搭建环境 2、回到项目&#xff08;VScode&#xff09; 3、项目核心渲染路径 4、网站资料&#xff08;启动项目的方法&#xff09; 二、JSX 三、实现渲染列表 四、实现条件渲染 五、实现复杂条件渲染 一、简介 1、搭建环境 npx creat-react-app reac…

YUV 颜色编码详解

YUV 简介 YUV是被欧洲电视系统所采用的一种颜色编码方法&#xff08;属于PAL&#xff09;&#xff0c;是PAL和SECAM模拟彩色电视制式采用的颜色空间。在现代彩色电视系统中&#xff0c;通常采用三管彩色摄影机或彩色CCD摄影机进行取像&#xff0c;然后把取得的彩色图像信号经分…

【WEB前端】---HTML---结构---笔记

目录 1.标签---单标签和双标签 1.1单标签 1.2双标签 2.基本结构标签 2.1HTML标签 2.2文档头部标签 2.3文档标题标签 2.4文档的主题标签 3.常用的标题标签 (n∈[1,6]) 4.段落标签 5.换行标签 6.文本格式化标签 6.1粗体 6.2倾斜 6.3删除线 6.4下划线 7.div和spa…

服务器工具集合推荐

推荐一个朋友开源的服务器运维整合工具,目前的功能包括: ddns&#xff0c;rdp、ssh终端、ftp、http代理&#xff0c;支持在线文件编辑&#xff0c;文件管理&#xff0c;docker&#xff0c;进程&#xff0c;系统监控、wol唤醒&#xff0c;电脑远程开机&#xff0c;点对点&#…

深度分析和对比本地大语言模型Ollama和LocalAI

前言 在充满活力的人工智能&#xff08;AI&#xff09;世界中&#xff0c;开源工具已成为开发人员和组织利用LLM&#xff08;大型语言模型&#xff09;力量的重要资源。这些工具通过提供对高级LLM模型的访问权限&#xff0c;使各种用户能够构建创新和前沿的解决方案。在众多可…

AI工具大盘点!打工人必备的几款效率神器!

前言 在这个AI技术大放异彩的时代&#xff0c;找到合适的工具&#xff0c;可以让我们的工作效率翻倍。作为一名AI工具测评博主&#xff0c;我今天要向大家推荐几款我亲自体验并认为非常实用的AI工具。它们不仅能够提升你的工作效率&#xff0c;还能让你在职场上更加得心应手。…

为本地化准备营销材料的几个步骤

为本地化准备营销材料涉及几个关键步骤&#xff0c;以确保内容在文化上合适、语言上准确&#xff0c;并与目标受众相关。以下是五个基本步骤&#xff1a; 进行市场调查 了解目标市场至关重要。进行深入研究&#xff0c;以收集有关目标地区受众的文化细微差别、消费者行为、地…

【机器学习】机器学习与图像识别的融合应用与性能优化新探索

文章目录 引言第一章&#xff1a;机器学习在图像识别中的应用1.1 数据预处理1.1.1 数据清洗1.1.2 数据归一化1.1.3 数据增强 1.2 模型选择1.2.1 卷积神经网络1.2.2 迁移学习1.2.3 混合模型 1.3 模型训练1.3.1 梯度下降1.3.2 随机梯度下降1.3.3 Adam优化器 1.4 模型评估与性能优…

Element中的表格组件Table和分页组件Pagination

简述&#xff1a;在 Element UI 中&#xff0c;Table组件是一个功能强大的数据展示工具&#xff0c;用于呈现结构化的数据列表。它提供了丰富的特性&#xff0c;使得数据展示不仅美观而且高效。而Pagination组件是一个用于实现数据分页显示的强大工具。它允许用户在大量数据中导…

【项目日记(四)】搜索引擎-Web模块

❣博主主页: 33的博客❣ ▶️文章专栏分类:项目日记◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多项目内容 目录 1.前言2.前端模块2.1页面设计2.2后端交互 3.部署到云服务器4.总结 1.前言 在前面的文…

nginx.conf配置参数解析

nginx配置文件解析 /usr/local/nginx/conf vim /etc/security/limits.conf #配置生效只能重新启动* soft nproc 65535 #能打开的进程最大数是软限制655335,65535是最大值 * hard nproc 65535 * soft nofile 65535 # 进程打开文件数的最大值65535 * hard nof…

ExtendSim在商业和服务行业中的仿真

仿真使企业能够做出明智的、数据驱动的预测&#xff0c;从而指导决策、产生积极成果并建立竞争优势。 精益分析 使用 ExtendSim 中的精益分析方法对欧洲的供应链网络进行建模&#xff0c;一家制造商实现了对最终客户的服务水平提高了 98%&#xff0c;而且现在可以在库存减少约 …

python 实现docx指定语言翻译(不丢失格式)

我这边有个需求需要把一份docx翻译成指定语言的文档并且保存&#xff0c;研究了下&#xff0c;记录。 首先先安装依赖 pip install python-docx1.1.2 googletrans4.0.0rc1 python-docx是用来读取docx的&#xff0c;googletrans使用来翻译的。 googletrans PyPI 这个是官方文…

用Vue3和Rough.js绘制一个交互式3D图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于Rough.js和GSAP创建交互式SVG图形卡片 应用场景 本代码适用于需要创建动态交互式SVG图形卡片的场景&#xff0c;例如网页设计、数据可视化和交互式艺术作品。 基本功能 该代码利用Rough.js和GSAP库&…

前端学习(五)CSS浮动与补白

目录&#xff1a; 内容&#xff1a; //设置左右浮动 .left{float:left; } .right{float:right; } /*必须设置不同浮动*/ //创建div <div> <dic class"left">左边</div> <div class"right">右边</div> </div> //设置浮…

地铁车厢火灾3D模拟逃生演习减少了资源损耗和风险

在消防安全领域&#xff0c;为了更好地提升安全实训效果&#xff0c;我们在VR安全培训领域打造了多款消防安全VR模拟实训系统&#xff0c;不仅实现了与现实世界无异的交互操作&#xff0c;更在虚拟空间中超越了现实的限制&#xff0c;模拟出那些现实中难以搭建的复杂场景。 利用…