C++系列-String(二)

2024-06-24 01:12
文章标签 c++ string 系列

本文主要是介绍C++系列-String(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🌈个人主页:羽晨同学 

💫个人格言:“成为自己未来的主人~”  

#define _CRT_SECURE_NO_WARNINGS
#include<string>
#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
void test_string3()
{string s1("hello world");s1[0] = 'x';cout << s1.size() << endl;for (size_t i = 0; i < s1.size(); i++){cout << s1[i] << " ";}cout << endl;for (size_t i = 0; i < s1.size(); i++){s1[i]++;}cout << endl;s1[0] = 'x';for (size_t i = 0; i < s1.size(); i++){cout << s1[i] << " ";}cout << endl;}
int main()
{test_string3();return 0;
}

在这个代码当中,结果为

 

我们可以看到,每个字节的ASCII码值都加了1

而若是我们使得【】中的数字大于s1的范围,会出现越界警告

	s1[20];

 

	const string s2("hello world");s2[0] = 'x';

而我们要是这个时候使用const进行修饰,则不能再对s2进行修改

 接下来,我们讲解三种对string的遍历方式

  • 下标+【】
	string s1("hello world");//遍历方式1:下标+[]for (size_t i = 0; i < s1.size(); i++){cout << s1[i] << " ";}cout << endl;

 

  • 迭代器
	//遍历方式2:迭代器auto it1 = s1.begin();while (it1 != s1.end()){*it1 += 3;cout << *it1 << " ";it1++;}cout << endl;

 

我们不仅可以对string进行遍历,而且可以对其中的值进行修改

  • 范围for
	//遍历方式3:范围for//底层角度,就是迭代器cout << s1 << endl;for (auto& e : s1){e++;cout << e << " ";}cout << endl;cout << s1 << endl;

对于范围for而言,相同的是我们不仅可以对其进行遍历,也可以对其进行修改,并且对于范围for而言,他的底层就是迭代器

	list<int>lt1;lt1.push_back(1);lt1.push_back(2);lt1.push_back(3);list<int>::iterator it = lt1.begin();while (it != lt1.end()){cout << *it << " ";++it;}cout << endl;for (auto e : lt1){cout << e << " ";}cout << endl;

 

void test_string5()
{const string s1("hello world");auto it1 = s1.begin();while (it1 != s1.end()){*it1 += 3;}
}

当我们用const修饰s1的时候,s1的内容使用迭代器仍然无法修改

接下来,我们来看一下rbegin和rend

	auto cit1 = s1.rbegin();while (cit1 != s1.rend()){cout << *cit1 << " ";++cit1;}cout << endl;

 

其实通过结果我们可以看到,rend和rbegin进行了相反遍历

	string s2("hello world");string::reverse_iterator it2 = s2.rbegin();while (it2 != s2.rend()){cout << *it2 << " ";++it2;}cout << endl;

其实通过这个代码,我们可以回顾到之前讲过的auto的作用,可以自动辨别类型,是不是相当方便。

我们接下来讲string中的下一个接口,对其按照字典序进行排序

}
void test_string6()
{string s1("hello world");cout << s1 << endl;//第一个和最后一个参与排序sort(s1.begin(), s1.end());sort(++s1.begin(), --s1.end());//前五个进行排序[0,5)sort(s1.begin(), s1.begin() + 5);cout << s1 << endl;
}

接下来我们来讲最后一个接口,push_back

void test_string7()
{string s1("hello world");cout << s1 << endl;//push_back只能增加字符s1.push_back('x');cout << s1 << endl;//s1.push_back("xxxxx");//append既可以用于字符串,也可以用于字符s1.append("yyyyyy!!");cout << s1 << endl;s1.append("x");cout << s1 << endl;string s2("111111");s1 += 'y';s1 += "zzzzzz";s1 += s2;cout << s1 << endl;}

 

这篇关于C++系列-String(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1088772

相关文章

关于C++中的虚拟继承的一些总结(虚拟继承,覆盖,派生,隐藏)

1.为什么要引入虚拟继承 虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class B1:public virtual A; class B2:pu

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

C++的模板(八):子系统

平常所见的大部分模板代码,模板所传的参数类型,到了模板里面,或实例化为对象,或嵌入模板内部结构中,或在模板内又派生了子类。不管怎样,最终他们在模板内,直接或间接,都实例化成对象了。 但这不是唯一的用法。试想一下。如果在模板内限制调用参数类型的构造函数会发生什么?参数类的对象在模板内无法构造。他们只能从模板的成员函数传入。模板不保存这些对象或者只保存他们的指针。因为构造函数被分离,这些指针在模板外

C++工程编译链接错误汇总VisualStudio

目录 一些小的知识点 make工具 可以使用windows下的事件查看器崩溃的地方 dumpbin工具查看dll是32位还是64位的 _MSC_VER .cc 和.cpp 【VC++目录中的包含目录】 vs 【C/C++常规中的附加包含目录】——头文件所在目录如何怎么添加,添加了以后搜索头文件就会到这些个路径下搜索了 include<> 和 include"" WinMain 和

C/C++的编译和链接过程

目录 从源文件生成可执行文件(书中第2章) 1.Preprocessing预处理——预处理器cpp 2.Compilation编译——编译器cll ps:vs中优化选项设置 3.Assembly汇编——汇编器as ps:vs中汇编输出文件设置 4.Linking链接——链接器ld 符号 模块,库 链接过程——链接器 链接过程 1.简单链接的例子 2.链接过程 3.地址和

C++必修:模版的入门到实践

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C++学习 贝蒂的主页:Betty’s blog 1. 泛型编程 首先让我们来思考一个问题,如何实现一个交换函数? void swap(int& x, int& y){int tmp = x;x = y;y = tmp;} 相信大家很快就能写出上面这段代码,但是如果要求这个交换函数支持字符型

C++入门01

1、.h和.cpp 源文件 (.cpp)源文件是C++程序的实际实现代码文件,其中包含了具体的函数和类的定义、实现以及其他相关的代码。主要特点如下:实现代码: 源文件中包含了函数、类的具体实现代码,用于实现程序的功能。编译单元: 源文件通常是一个编译单元,即单独编译的基本单位。每个源文件都会经过编译器的处理,生成对应的目标文件。包含头文件: 源文件可以通过#include指令引入头文件,以使

C++面试八股文:std::deque用过吗?

100编程书屋_孔夫子旧书网 某日二师兄参加XXX科技公司的C++工程师开发岗位第26面: 面试官:deque用过吗? 二师兄:说实话,很少用,基本没用过。 面试官:为什么? 二师兄:因为使用它的场景很少,大部分需要性能、且需要自动扩容的时候使用vector,需要随机插入和删除的时候可以使用list。 面试官:那你知道STL中的stack是如何实现的吗? 二师兄:默认情况下,stack使

JavaWeb系列二十: jQuery的DOM操作 下

jQuery的DOM操作 CSS-DOM操作多选框案例页面加载完毕触发方法作业布置jQuery获取选中复选框的值jQuery控制checkbox被选中jQuery控制(全选/全不选/反选)jQuery动态添加删除用户 CSS-DOM操作 获取和设置元素的样式属性: css()获取和设置元素透明度: opacity属性获取和设置元素高度, 宽度: height(), widt

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级