【C++STL基础入门】深入理解string类重新赋值(assign)与删除(erase)

news2024/7/6 19:58:20

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、重新赋值
    • 1.重新赋值指定元素
    • 2.assign函数
  • 二、删除指定元素
    • 1.erase函数
    • 2.删除全部
      • 使用erase()
      • 使用clear()
  • 总结


前言

在这里插入图片描述

本系列STL使用的是VS2022,C++20版本

在C++中,string类是一种强大的数据类型,用于处理字符串。它提供了许多便捷的方法来操作和修改字符串。本教程将重点介绍string类的重新赋值和删除操作。我们将学习如何使用赋值运算符和相关函数来改变和删除字符串的内容。让我们深入研究这些概念。


一、重新赋值

1.重新赋值指定元素

1、=赋值
功能:赋值运算符(=)将一个字符串赋值给另一个字符串,替换它的内容。
示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str1 = "Hello";
    std::string str2;
  
    std::cout << "Before assignment: " << str2 << std::endl;
  
    str2 = str1;
  
    std::cout << "After assignment: " << str2 << std::endl;
  
    return 0;
}

输出:
在这里插入图片描述

2、>>输入赋值
作用:可以使用输入操作符(>>)从标准输入流或其他流中读取字符串,并将其赋值给string对象。
示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str;
  
    std::cout << "Enter a string: ";
    std::cin >> str;
  
    std::cout << "You entered: " << str << std::endl;
  
    return 0;
}

输出:
在这里插入图片描述

3、[ ] 下标运算赋值
作用:下标运算符([])允许我们使用索引来访问和修改字符串中的特定字符。
示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello";
  
    std::cout << "Before assignment: " << str << std::endl;
  
    str[0] = 'W';
  
    std::cout << "After assignment: " << str << std::endl;
  
    return 0;
}

输出:
在这里插入图片描述

4、at()函数赋值
作用:at()函数类似于下标运算符([]),它允许我们使用索引来访问和修改字符串中的特定字符。不同之处在于,at()函数会进行范围检查,如果索引超出范围,它会抛出异常。

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello";
  
    std::cout << "Before assignment: " << str << std::endl;
  
    str.at(0) = 'W';
  
    std::cout << "After assignment: " << str << std::endl;
  
    return 0;
}

输出:
在这里插入图片描述

2.assign函数

1、basic_string &assign( const basic_string &str );
作用:将一个字符串赋值给当前的basic_string对象。

参数的作用是传入一个basic_string对象,作为赋值源。

返回值的作用是返回当前的basic_string对象的引用,以便进行链式赋值。
示例代码:

std::string str1 = "Hello";
std::string str2;
str2.assign(str1);
// 现在,str2 的值为 "Hello"

2、basic_string &assign( const char *str );
作用是将一个以null结尾的C字符串赋值给当前的basic_string对象。

参数的作用是传入一个以null结尾的C字符串,作为赋值源。

返回值的作用是返回当前的basic_string对象的引用,以便进行链式赋值。

示例代码:

const char* cstr = "World";
std::string str;
str.assign(cstr);
// 现在,str 的值为 "World"

3、basic_string &assign( const basic_string &str, size_type index, size_type len );
函数的作用是将另一个basic_string对象的子串赋值给当前的basic_string对象。

参数的作用是传入另一个basic_string对象作为赋值源,以及要复制的起始位置index和子串的长度len。

返回值的作用是返回当前的basic_string对象的引用,以便进行链式赋值。

示例代码:

std::string str1 = "i am amazing!";
std::string str2;
str2.assign(str1, 0, 6);
// 现在,str2 的值为 "i am ama"

4、basic_string &assign( const char *str, size_type num );
函数的作用是将一个C字符串的前num个字符赋值给当前的basic_string对象。

参数的作用是传入一个以null结尾的C字符串作为赋值源,以及要复制的字符个数num。

返回值的作用是返回当前的basic_string对象的引用,以便进行链式赋值。

示例代码:

const char* cstr = "Hello, World!";
std::string str;
str.assign(cstr, 5);
// 现在,str 的值为 "Hello"

5、basic_string &assign( size_type num, char ch );
函数的作用是将重复的字符赋值给当前的basic_string对象。

参数的作用是传入要重复的字符个数num,以及要重复的字符ch。

返回值的作用是返回当前的basic_string对象的引用,以便进行链式赋值。

示例代码:

std::string str;
str.assign(5, 'X');
// 现在,str 的值为 "XXXXX"

二、删除指定元素

1.erase函数

1、 basic_string &erase( size_type index = 0, size_type num = npos );
函数作用:erase() 函数用于从字符串中删除字符。它能够删除从指定位置开始的指定数量的字符,并返回修改后的字符串对象的引用

参数的作用:
index:指定要删除的起始位置,默认值为 0,表示从字符串的开头开始删除。
num:指定要删除的字符数量,默认值为 npos,表示删除从起始位置到字符串末尾的所有字符。

返回值的作用:
函数返回一个指向修改后的字符串对象的引用。

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str = "Hello, World!";
    std::cout << "Original String: " << str << std::endl;

    // 删除从位置5开始的3个字符
    str.erase(5, 3);

    std::cout << "Modified String: " << str << std::endl;

    return 0;
}

输出:
在这里插入图片描述

2.删除全部

使用erase()

通过上面的函数原型分析,可得使用erase()下面的方法即可删除所有字符:

erase(0, str.length());

使用clear()

函数的作用是清空字符串,即将字符串的内容全部删除,使字符串变为空字符串。

参数的作用是该函数没有任何参数。

返回值的作用是该函数没有返回值。

示例代码:

#include <iostream>
#include <string>

int main() {
    std::string str = "Example String";
    std::cout << "Original String: " << str << std::endl;

    str.clear();

    std::cout << "Cleared String: " << str << std::endl;

    return 0;
}

输出:
在这里插入图片描述

总结

深入理解string类重新赋值(assign)与删除(erase)总结:

string 类是 C++ 标准库中用于处理字符串的一个重要类。在 string 类中,重新赋值和删除操作是常用的操作之一。

1、重新赋值 (assign):

string 类提供了多种重载形式的 assign() 函数,用于将新的字符串赋值给已有的字符串对象。
重新赋值可以使用字符串、字符、字符数组等作为参数。
值得注意的是,重新赋值会覆盖原有的字符串内容,并将新的值赋给字符串对象。

2、删除 (erase):

string 类的 erase() 函数用于删除字符串中指定位置的字符或一定范围内的字符。
erase() 函数可以指定删除的起始位置和删除的字符数量。
若不指定参数,则默认从起始位置删除到字符串末尾的所有字符。
删除操作会改变原始字符串对象的内容,并返回修改后的字符串对象。
总结起来,重新赋值和删除操作是 string 类中常用的字符串处理操作。重新赋值用于将新的字符串值赋给字符串对象,而删除操作用于删除指定位置的字符或一定范围的字符,并返回修改后的字符串对象。

这些操作可灵活运用于字符串处理,帮助我们对字符串进行修改和调整,满足各种需求。了解和熟练掌握这两种操作可以提高字符串处理的效率和灵活性。

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

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

相关文章

龙讯旷腾PWmat已部署至曙光智算平台

编者荐语&#xff1a; 近期&#xff0c;龙讯旷腾核心产品PWmat已成功部署至曙光智算AC.sugon.com平台&#xff0c;可为用户提供包括分子建模、第一性原理计算、数据可视化等在内的完备的超级计算云服务&#xff0c;让大家能够轻松上手具有完全自主知识产权的大尺度高性能材料计…

公用医学数据库有哪些?

公共卫生领域的科学研究和知识获取正日益依赖于医学数据库。本文整理了一些公用医学数据库&#xff0c;希望对你有帮助。先收藏&#xff0c;再继续看。 一、中国营养健康调查CHNS数据库 https://www.cpc.unc.edu/projects/china 中国健康与营养调查&#xff08;China Heal…

看完天才少年稚辉君智元机器人发布会后的一点感受

(点击即可收听) 智辉君&#xff0c;在科技圈里是一位非常有名的技术大佬&#xff0c;华为天才少年&#xff0c;年入百万招入&#xff0c;破圈于B站 人称科技圈里的野生钢铁侠&#xff0c;凡是看过他B站里一些科技硬核作品&#xff0c;外行人看了直呼666&#xff0c;内行人看了惊…

Sience子刊 新研究揭示:COVID-19病毒影响人体线粒体功能,或成治疗新途径

自SARS-CoV-2病毒引发的COVID-19大流行暴发以来,研究人员一直致力于探索为何该病毒相较于其他冠状病毒&#xff0c;会引发如此严重和长期的影响。近期,费城儿童医院(CHOP)团队和COVID-19国际研究小组(COV-IRT)合作发现,新冠病毒对线粒体&#xff08;人体细胞的能量工厂&#xf…

测试框架pytest教程(6)钩子函数hook开发pytest插件

pytest hook 函数也叫钩子函数&#xff0c;pytest 提供了大量的钩子函数&#xff0c;可以在用例的不同生命周期自动调用。 比如&#xff0c;在测试用例收集阶段&#xff0c;可利用 hook 函数修改测试用例名称的编码。 pytest的hook是基于Python的插件系统实现的&#xff0c;使…

k8s挂载映射操作详解

k8s投射数据卷 Projected Volume 在 k8s 中&#xff0c;有几种特殊的 Volume&#xff0c;它们的意义不是为了存放容器里的数据&#xff0c;也不是用来进行容器和宿主机之间的数据交换。"而是为容器提供预先定义好的数据。" 从容器的角度来看&#xff0c;这些 Volume…

xlsx工作表隐藏了?不用担心,这些方法帮你恢复

在进行数据整理或保护时&#xff0c;很多用户可能会选择隐藏XLSX工作表。然而&#xff0c;当需要重新显示之前隐藏的工作表时&#xff0c;可能会感到困惑。不过&#xff0c;不用担心&#xff0c;下面将向您介绍xlsx工作表隐藏怎么恢复。 ▌第一部分&#xff1a;XLSX工作表隐藏…

结构型(三) - 享元模式

一、概念 享元模式&#xff08;Flyweight Pattern&#xff09;&#xff1a;所谓“享元”&#xff0c;顾名思义就是被共享的单元。享元模式的意图是复用对象&#xff0c;节省内存&#xff0c;前提是享元对象是不可变对象。 优点&#xff1a;可以极大地减少内存中对象的数量&am…

鉴源实验室丨软件代码结构化覆盖测试-语句覆盖

作者 | 李伟 上海控安安全测评部总监 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 引言&#xff1a; 之前我们一直在讲功能、性能、以及专项等相关的测试&#xff0c;这些测试主要集中在集成测试&#xff0c;系统验证等阶段&#x…

【快速傅里叶变换(fft)和逆快速傅里叶变换】生成雷达接收到的经过多普勒频移的脉冲雷达信号(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

颜值爆表!这款开源的API工具用起来更优雅!

作为一名后端开发者&#xff0c;我们经常会使用API工具来调试接口&#xff0c;之前一直使用的Postman&#xff0c;用多了感觉它有点不够轻量级&#xff0c;有时候打开也比较慢。最近发现了一款轻量级的开源API工具Insomnia&#xff0c;界面挺炫酷&#xff0c;功能也很实用&…

井下空气质量检测预警系统,煤矿生产、事故应急检测和实时监测

井下空气质量检测预警系统,煤矿生产、事故应急检测和实时监测 在煤矿生产中&#xff0c;空气质量是关系到矿工生命安全的重要因素。煤矿内部存在着各种有害气体&#xff0c;如甲烷、一氧化碳等&#xff0c;高浓度的有害气体会导致矿工中毒、窒息等危险情况&#xff0c;因此煤矿…

Linux journalctl命令详解(journalctl指令)(systemd服务默认日志管理工具)

文章目录 Linux Journalctl命令详解1. Journalctl简介2. Journalctl基础使用3. 过滤日志条目4. 时间戳和日志轮转5. 高级应用6. journalctl --help指令文档英文中文 注意事项journal日志不会将程序输出的空行显示&#xff0c;日志会被压缩得满满当当。journal日志不会自动持久化…

HTML5+CSS3+JS小实例:环形文字动画特效

实例:环形文字动画特效 技术栈:HTML+CSS+JS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&quo…

排序算法之详解冒泡排序

引入 冒泡排序顾名思义&#xff0c;就是像冒泡一样&#xff0c;泡泡在水里慢慢升上来&#xff0c;由小变大。虽然冒泡排序和冒泡并不完全一样&#xff0c;但却可以帮助我们理解冒泡排序。 思路 一组无序的数组&#xff0c;要求我们从小到大排列 我们可以先将最大的元素放在数组…

关于图像分类、图像识别和目标检测异同

计算机视觉是人工智能领域的一个重要分支&#xff0c;它旨在构建能够理解和处理图像、视频等视觉信息的计算机系统。在计算机视觉领域中&#xff0c;图像分类、图像识别和目标检测是三个重要的任务&#xff0c;当然目标跟踪、图像生成也是新的方向和延伸。 其实下面这幅图已经非…

A. Two Semiknights Meet

题目描述 可知走法为中国象棋中的象的走法 解题思路 利用结构体来存储两个 K K K的位置 x , y x,y x,y&#xff0c;因为两个 K K K同时走&#xff0c;所以会出现两种情况 相向而行&#xff0c;两者距离减少 相反而行&#xff0c;两者距离不变 我们完全可以不考虑格子是好…

记一次从Redis弱口令到RCE

Fscan扫描网段发现了一些开启了6379的服务器&#xff0c;逐个尝试了下未授权&#xff0c;然后尝试了下爆破 hydra爆破redis hydra -P [字典目录] redis://xxx.xxx.xxx.xxx结果还真让爆出来一个 得到密码后&#xff0c;连接上去&#xff0c;这里用的是Another Redis Desktop M…

polar si9000使用---1

1、软件界面 2、表面单端信号 表层单端走线&#xff1a;1、走线表面未覆盖绿油&#xff1b;2、参考表面为完整的地平面&#xff1b;3、走线同层不进行铺铜操作&#xff0c;或者同层铺铜的距离大于参考地到走线距离H1&#xff1b; 表层单端走线&#xff1a;1、走线表面覆盖绿油…

【自适应稀疏度量方法和RQAM】疏度测量、RQAM特征、AWSPT和基于AWSPT的稀疏度测量研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…