c与c++中的字符串

news2024/12/23 20:18:51

在c++中,string本质上是一个类;

string与char *有些区别:

  • char*是一个指针;
  • string是一个类,类内封装了char*,管理这一个字符串,是一个char*的容器

在使用string类型时,要加上其头文件

string的初始化操作

string str1;

最直接的初始化,一定要记住;

后面几种了解就ok了

第二种:

const char* c="hello world!";
string str2(c);

用char*来存储,存储的是字符串常量,所以某些编译器需要加上const,为保持习惯,建议加上const

第三种:

const char* c="hello world!";
string str2(c);
string str3(str2);

而在输出字符串的时候可以用字符串变量名+[]来输出,好似跟字符指针输出方式一摸一样

所以我感觉:无论是字符指针还是string类名本质是都是字符串首个元素的地址,类似与数组一样,所以可以利用数组的方式进行输出

其实对于字符串中字符的存取(c++中的字符串)还有一个方法就是调用at接口

string的赋值:

第一种方式:最常用基本

string str;
str="hello world!"
cout<<str<<endl;

后面的了解下就欧克了

//第二种
str2=str1;

//第三种
string str3;
str3='a';

//第四种
string str4;
str4.assign("hello world");
//感觉调用assign这个接口实在不如等号来的方便

//第五种
string str5;
str5.assign("hello world",5);//把前五个字符赋值给str5;

其实还有更多赋值方法,不过很鸡肋,大多用不到,就不多介绍了;

string的拼接:重载+=操作符;append接口

重载+=操作符已经封装在这个类内了,我们只需要调用就欧克了

append接口在这里就不介绍了;

string的查找和替换;

查找:find;替换:rfind;

int find(const string &str,int pos=0) const;查找str第一次出现的位置,从pos开始查找

记住这个是从0开始索引,没有找到返回-1;

rfind与find区别:rfind从右往左查找,但返回的值是从左往右计算;

find从左往右查找,返回的值也是从左往右,

其余该查找和替换的函数的不同参数就不介绍了,因为用不到;

string比较;

比较方式是通过ASCII值进行比较;

>返回1,=返回0;<返回-1;

int compare(const string& str)const;

int compare(const char*s)const;

 string的插入和删除;

插入:string& insert(int pos,const char*s);

string& insert(int pos,const string& str);

删除:string& erase(int pos,int n=pos);

这些函数原型都超级简单,手巧几遍就可以轻松学会;

 string子串;

函数原型:string substr(int pos=0,int n=npos)const;返回由pos开始的n个字符组成的字符串

 

第二个参数可以理解为 从pos初开始的n个字符

 

从下标0开始到第三个字符,就是下标0是第一个字符,下标1是第二个字符,下标2是第三个字符,所以只打印abc 

string的两种输入方式:

先介绍两种输出方式:cin/scanf和两种输出方式cout/printf

scanf和printf是格式化输入输出,输入输出效率高,cin和cout是输入输出流,输入输出效率低

输出流之所以慢,是因为是要先把输出的东西放入缓存区再输出;

对于字符:cin的输入忽略空格和回车,scanf("%c",&i)等价于i=getchar(),空格和回车都会被输入;

下面介绍用cin和scanf输入字符串:

string s1;
cin>>s1;

 cin可以直接输入;

const int 10000
string s1;
s1.resize(N);
scanf("%s",&s1[0]);

用scanf输入就比较麻烦了;首先需要先预先指定s1的大小,然后需要在scanf的参数中取首元素地址;但运行速度是比cin快的;
 

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

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

相关文章

用向量数据库Milvus Cloud 搭建AI聊天机器人

加入大语言模型(LLM) 接着,需要在聊天机器人中加入 LLM。这样,用户就可以和聊天机器人开展对话了。本示例中,我们将使用 OpenAI ChatGPT 背后的模型服务:GPT-3.5。 聊天记录 为了使 LLM 回答更准确,我们需要存储用户和机器人的聊天记录,并在查询时调用这些记录,可以用…

新版校园跑腿独立版小程序源码 多校版本,多模块,适合跑腿,外卖,表白,二手,快递等校园服务

最新校园跑腿小程序源码 多校版本&#xff0c;多模块&#xff0c;适合跑腿&#xff0c;外卖&#xff0c;表白&#xff0c;二手&#xff0c;快递等校园服务 此版本为独立版本&#xff0c;不需要** 直接放入就可以 需要自己准备好后台的服务器&#xff0c;已认证的小程序&#xf…

mysql面试题17:MySQL引擎InnoDB与MyISAM的区别

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:MySQL引擎InnoDB与MyISAM的区别 InnoDB和MyISAM是MySQL中两种常见的存储引擎,它们在功能和性能方面有一些区别。下面将详细介绍它们之间的差异。…

【微信小程序开发】一文学会使用CSS控制样式布局与美化

引言 在微信小程序开发中&#xff0c;CSS样式布局和美化是非常重要的一部分&#xff0c;它能够为小程序增添美感&#xff0c;提升用户体验。本文将介绍如何学习使用CSS进行样式布局和美化&#xff0c;同时给出代码示例&#xff0c;帮助开发者更好地掌握这一技巧。 一、CSS样式布…

基于HSV空间的彩色图像分割技术

1. 引言 每当我们看到图像时&#xff0c;它通常都是由各种元素和目标组成的。在某些情况下&#xff0c;我们可能会想要从图像中提取某个特定的对象&#xff0c;大家会怎么做&#xff1f;首先我们会想到的是进行crop相关的操作&#xff0c;这在某种程度上是可行的&#xff0c;但…

《数字图像处理-OpenCV/Python》连载(10)图像属性与数据类型

《数字图像处理-OpenCV/Python》连载&#xff08;10&#xff09;图像属性与数据类型 本书京东优惠购书链接&#xff1a;https://item.jd.com/14098452.html 本书CSDN独家连载专栏&#xff1a;https://blog.csdn.net/youcans/category_12418787.html 第2章 图像的数据格式 在P…

AcCode项目测试报告

文章目录 项目介绍编写测试用例根据测试用例编写自动化测试0.搭建测试环境1. 创建功能类2. 编写注册功能自动化3.编写登录功能自动化 性能测试1.使用VUG编写性能测试脚本2. 创建测试场景3.开始执行4. 简单分析性能测试报告事务报告运行的虚拟用户图表点击率表吞吐量图表系统资源…

C#,数值计算——Sobol拟随机序列的计算方法与源程序

1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { /// <summary> /// Sobol quasi-random sequence /// </summary> public class Sobol { public Sobol() { } public static void sobseq(int n,…

堆排序——向下调整

之前我们要想实现堆排序&#xff0c;是运用建堆代码来实现的&#xff1a; 向上调整建堆——向下调整排序 那么去我们可不可以只适用一种调整方法&#xff08;向下调整&#xff09;就能实现这样的功能呢&#xff1f; 向要只使用向下调整就实现堆排序 首先就是把数组里的值使用…

互联网Java工程师面试题·Dubbo 篇·第二弹

目录 18、Dubbo 用到哪些设计模式&#xff1f; 19、Dubbo 配置文件是如何加载到 Spring 中的&#xff1f; 20、Dubbo SPI 和 Java SPI 区别&#xff1f; 21、Dubbo 支持分布式事务吗&#xff1f; 22、Dubbo 可以对结果进行缓存吗&#xff1f; 23、服务上线怎么兼容旧版本&…

设计模式12、代理模式 Proxy

解释说明&#xff1a;代理模式&#xff08;Proxy Pattern&#xff09;为其他对象提供了一种代理&#xff0c;以控制对这个对象的访问。在某些情况下&#xff0c;一个对象不适合或者不能直接引用另一个对象&#xff0c;而代理对象可以在客户端和目标对象之间起到中介的作用。 抽…

星宿UI2.4资源付费变现小程序源码 支持流量主

第一个小程序为星宿小程序 目前是最新版2.0 搭建星宿需要&#xff1a;备用域名 服务器 微信小程序账号 功能&#xff1a;文章展示 文章分类 资源链接下载 轮播图 直接下载附件功能 很多 很适合做资源类分享 源码下载&#xff1a;https://download.csdn.net/download/m0_6604…

Android LitePal byte[]类型字段不被创建

我创建了以下实体类&#xff0c;主要是用户分享的内容、分享的照片、分享的标题&#xff0c;然后百度了一下LitePal可以识别byte[]&#xff0c;因为需要文件的上传与读取&#xff1a; public class Context extends LitePalSupport {private Integer ContextId;private String…

二叉树题目:路径总和 II

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;路径总和 II 出处&#xff1a;113. 路径总和 II 难度 4 级 题目描述 要求 给你二叉树的根结点 root \tex…

软件设计模式系列之二十五——访问者模式

访问者模式&#xff08;Visitor Pattern&#xff09;是一种强大的行为型设计模式&#xff0c;它允许你在不改变被访问对象的类的前提下&#xff0c;定义新的操作和行为。本文将详细介绍访问者模式&#xff0c;包括其定义、举例说明、结构、实现步骤、Java代码实现、典型应用场景…

【2023年11月第四版教材】第18章《项目绩效域》(第一部分)

第18章《项目绩效域》&#xff08;第一部分&#xff09; 1 章节内容2 干系人绩效域2.1 绩效要点2.2 执行效果检查2.3 与其他绩效域的相互作用 3 团队绩效域3.1 绩效要点3.2 与其他绩效域的相互作用3.3 执行效果检查3.4 开发方法和生命周期绩效域 4 绩效要点4.1 与其他绩效域的相…

电脑重置 Win 10系统

文章目录 电脑重置系统操作步骤一、右键 开始→ 设置二、点击 更新与安全三、点击 恢复四、点击 开始四、按需二选一五、以本地重新安装为例&#xff0c;点击 下一页六、点击 重置七、重新进行Windows设置 当电脑出现系统文件损坏、磁盘掉盘等情况&#xff0c;可以考虑重装系统…

Docker启动Mysql

如果docker里面没有mysql需要先pull一个mysql镜像 docker pull mysql其中123456是mysql的密码 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql可以使用如下命令进入Mysql的命令行界面 docker exec -it mysql bash登录mysql使用如下命令,root是…

基于SSM框架的校园疫情防控健康打卡系统

本系统采用基于JAVA语言实现、架构模式选择B/S架构&#xff0c;Tomcat7.0及以上作为运行服务器支持&#xff0c;基于JAVA等主要技术和框架设计&#xff0c;idea作为开发环境&#xff0c;数据库采用MYSQL5.7以上。 开发环境&#xff1a; JDK版本&#xff1a;JDK1.8 服务器&…

【go语言】入门go语言结构体

结构体的定义 结构体是一种用户自定义的数据类型&#xff0c;它由一组字段组成&#xff0c;每个字段可以是任意基本类型或其他结构体类型。结构体在Go语言中被广泛使用&#xff0c;它可以用来表示复杂的数据结构&#xff0c;比如二叉树、链表、图等。 结构体的形式如下&#…