C++:string 类

在C++中定义一个 std::string 字符串可以采用以下几种方式:

1.使用字符串字面量初始化:
std::string str = "Hello, world!";
2.使用构造函数初始化:
std::string szStringB("Hello wolven");
3.使用重复字符初始化:
std::string szStringC(6, 'w');

无论采用哪种方式,都可以创建一个 std::string 类型的字符串。选择哪种方式取决于代码的需求和个人偏好。

string处理字符串的方法

std::string 类定义在 <string> 头文件中,它提供了一系列方法来操作字符串,例如计算长度、查找、插入、删除、比较等。

长度计算:length()
std::string szStringA = "Hello,world";
std::cout << "Length:" << szStringA.length() << std::endl;

字符串查找 find()
std::string szStringA = "Hello,world C++";
​
size_t pos = szStringA.find("C++");
​
if (pos != std::string::npos) {std::cout << "Found String Positon at:" << pos << std::endl;
}else{std::cout << "Not Found String" << std::endl;
}

使用 find 方法查找子字符串 "C++" 在 szStringA 中的位置,并将结果保存在变量 pos 中。如果 find 方法找到了子字符串,则返回子字符串在原字符串中的起始位置;如果没有找到,则返回 std::string::npos,表示未找到。最后,根据 pos 的值,输出相应的消息,指示是否找到了字符串。

字符串插入方法 insert()

1.插入单个字符: 使用 insert 方法可以在指定位置插入单个字符

std::string szStringA = "Hello,world C++";
szStringA.insert(5,1,'0');
std::cout << szStringA << std::endl;

在szStringA字符串的位置5插入一个'0'

输出结果:Hell0,world C++

2.插入字符串:使用 insert 方法可以在指定位置插入另一个字符串。

std::string szStringA = "Hello,world C++";
std::string szStringB(" Hello wolven");
szStringA.insert(15, szStringB);
std::cout << szStringA << std::endl;

在szStringA 字符串的位置15插入字符串 " Hello wolven"

输出结果:Hello,world C++ Hello wolven

3.插入部分子字符串:使用 insert 方法可以在指定位置插入另一个字符串的一部分。

std::string szStringA = "Hello,world C++";
std::string szStringB(" Hello wolven");
szStringA.insert(15, szStringB,0,6);
std::cout << szStringA << std::endl;

在位置15插入字符串 szStringB的子字符串位置0到6的位置也就是“ Hello”

输出结果:Hello,world C++ Hello

字符串删除方法 erase()

1.删除单个字符:删除指定位置的单个字符。

std::string szStringA = "Hello,world C++";
szStringA.erase(5,1);
std::cout << szStringA << std::endl;

删除szStringA字符串位置5的1个字符,即逗号

输出结果:Helloworld C++

2.删除子字符串:删除指定范围内的子字符串。

std::string szStringA = "Hello,world C++";
szStringA.erase(5,6);
std::cout << szStringA << std::endl;

删除szStringA字符串位置5开始算起的6个字符,即“,world”

输出结果:Hello C++

3.删除到字符串末尾:删除从指定位置到字符串末尾的所有字符。

std::string szStringA = "Hello,world C++";
szStringA.erase(5);

从位置5开始删除到字符串末尾的所有字符,即 ", world C++"

输出结果:Hello

字符串的比较方法 compare()

compare 方法返回一个整数,表示两个字符串的大小关系。如果字符串相等,则返回0;如果第一个字符串小于第二个字符串,则返回负数;如果第一个字符串大于第二个字符串,则返回正数。

std::string szStringA = "Hello,world C++";
std::string szStringB(" Hello wolven");int res = szStringA.compare(szStringB);
if (res > 0) {std::cout << "szStringA > szStringB" << std::endl;
}
else if(res < 0){std::cout << "szStringA > szStringB" << std::endl;
}
else
{std::cout << "szStringA  =  szStringB" << std::endl;
}

输出结果:

在C++中,字符串比较大小通常是按照字典序进行的,也就是按照字符的ASCII值进行比较。这意味着,如果两个字符串的第一个字符不同,那么这两个字符串的大小比较就取决于它们第一个不同的字符的ASCII值。

字符串替换方法replace()

这个方法可以用于替换指定位置和长度的子字符串为另一个字符串。

std::string szStringA = "Hello,world C++";
std::string szStringB("wolven");size_t pos = szStringA.find("C++");
if (pos != std::string::npos) {szStringA.replace(pos, 3, szStringB);
}std::cout << szStringA << std::endl;

使用 find 方法查找字符串 szStringA 中子字符串 "C++" 的位置,并将结果保存在变量 pos 中。如果找到了 "C++",则执行以下操作:使用 replace 方法将字符串 szStringA 中从位置 pos 开始的 3 个字符(即 "C++")替换为字符串 szStringB("wolven")。最后,代码输出替换后的 szStringA

字符串拼接: + 加号操作符
std::string szStringA = "Hello,world C++";
std::string szStringB("wolven");std::string szStringResult = szStringA + szStringB;
std::cout << szStringResult << std::endl;

加号运算符可以将两个字符串连接起来,并产生一个新的字符串。

在 C++ 中,+ 操作符不仅可以用于数值的加法,还可以用于字符串的拼接。这是因为 C++ 对于字符串类型 std::string 重载了 + 操作符,使其能够执行字符串的连接操作。

下一篇文章就来说一下运算符重载。

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

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

相关文章

FTP 文件传输协议

FTP 文件传输协议 作用 用来传输文件的 FTP协议采用的是TCP作为传输协议&#xff0c; 21号端口用来传输FTP控制命令的&#xff0c; 20号端口用来传输文件数据的 FTP传输模式&#xff1a; 主动模式&#xff1a; FTP服务端接收下载控制命令后&#xff0c;会主动从tcp/20号端口…

iOS pod库包含MRC类

在我们iOS开发过程中,碰到的大部分文件都是基于ARC内存管理的,但也免不了用到一些三方的MRC的代码,这里介绍三种方法来编写包括MRC文件的.podspec文件。 1).在podspec中指定requires_arc:false,同时指定requires_arc的文件,eg: 这样写的好处是别的项目拉取到你pod源码的时候,不…

后端学习记录~~JavaSE篇(Module08-异常 上 )

总览&#xff1a; Java概述&#xff1a; 思维导图文件在本人个人主页上-----资源模块 资源详情&#xff08;免费下载&#xff09;&#xff1a;Java学习思维导图异常篇资源-CSDN文库https://download.csdn.net/download/m0_61589682/89238330 整体展示&#xff1a;

Spring IOC(二)

1. Bean的定义与获取 1.1 定义Bean 在Spring 中定义Bean的方式主要有三种&#xff1a; 1、基于XML配置文件的方式&#xff08;了解&#xff09;&#xff1a;通常会在配置文件中使用<bean>标签来定义Bean&#xff0c;并设置Bean的属性、依赖关系等信息。 2、基于注解的方…

spring接入socket.io注意事项

因为前端要求&#xff0c;最后我们采用的socket.io来做我们的消息推送&#xff0c;在联调期间遇到了一些问题&#xff0c;这里记录一下&#xff0c;首先我和前端参考了日常记录-SpringBoot整合netty-socketio和Vue3和SpringBoot集成SocketIO&#xff08;WebSocket&#xff09; …

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.5, 汇编 led.s,第一次点亮LED灯

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

kaggle(4) Regression with an Abalone Dataset 鲍鱼数据集的回归

kaggle&#xff08;4&#xff09; Regression with an Abalone Dataset 鲍鱼数据集的回归 import pandas as pd import numpy as npimport xgboost import lightgbm import optuna import catboostfrom sklearn.model_selection import train_test_split from sklearn.metrics …

GMSSL编译iOS

一、GMSSL-2.x 国密SDK源码下载&#xff0c;对GMSSL库进行编译生成对应的静态库。执行如下命令&#xff1a; cd到SDK源码目录 cd /Users/xxxx/Downloads/GMSSLV2-master查看SDK适用环境 ./config上图中错误解决方法 使用文本编辑器打开SDK目录下Configure、test/build.info、…

Vue.js(过渡)

1.过渡 Vue 在插入、更新或者移除 DOM 时&#xff0c;提供多种不同方式的应用过渡效果。 Vue 提供了内置的过渡封装组件&#xff0c;该组件用于包裹要实现过渡效果的组件。 语法格式 <transition name "nameoftransition"><div></div> </tr…

Android 学习 鸿蒙HarmonyOS 4.0 第二天(项目结构认识)

项目结构认识 和 了解&#xff1a; 工程目录下的结构如下&#xff1a; 首先能看到有两个.开头的文件&#xff0c;分别是.hvigor 和 .idea。这两个文件夹都是与构建有关系的&#xff0c; 如果你开发过安卓app&#xff0c;构建完会生成一个apk安装包&#xff0c;鸿蒙则是生成hap…

【C++风云录】进入语音识别与自然语言处理的世界:探索C++库的功能与应用场景

构建智能语音应用&#xff1a;深入了解C语音识别与自然语言处理库 前言 语音识别和自然语言处理是人工智能领域的重要研究方向&#xff0c;它们在自动语音识别、机器翻译、智能对话等方面有着广泛的应用。在这个领域&#xff0c;有许多优秀的开源和商业的工具和库可供选择&am…

mxnet.gluon.rnn及mxnet.symbol实现LSTM教程

基于mxnet.symbol的基本使用以及模型加载与保存 mxnet基本使用以及模型加载与保存 mxnet.symbolRNN-GRU-LSTM-Bi官网教程 基于mxnet的LSTM实现(mx.rnn.LSTMCellsymbol) 基于mxnet.gluon.rnn的基本使用以及模型加载与保存 LSTM Mxnet Implementation-手写 mxnet.gluon.rnn.LSTM中…

K8s: Helm包管理工具的应用以及项目分环境部署

Helm 概述与安装 1 ) 概述 k8s中官方包管理工具, 官网: https://helm.sh/用 Yaml 管理多个应用同时部署 不需要在不同的yaml中写两遍&#xff0c;执行两遍解决一键部署的问题&#xff0c;联合部署 实现了部署的版本管理 可以实现版本回滚 应用和配置分离 2 &#xff09;安装 …

阿里云RocketMQ消费MQTT消息

业务背景&#xff1a; 项目中涉及的消息队列既有RocketMQ&#xff0c;又有MQTT&#xff0c;均为阿里云提供&#xff08;阿里云有专门的“微消息队列 MQTT 版”模块&#xff0c;但博主公司消息队列的实例都在“消息队列 RocketMQ 版”模块下&#xff0c;只是实例不同&#xff0c…

【Oracle】python调取oracle数据教程

目录 &#xff08;1&#xff09;安装python和相关库 1.python的下载和安装 2.python安装cx_Oracle库和pandas库 3.本机安装instantclient 数据库客户端 先安装instantclient 然后设置环境变量 &#xff08;2&#xff09;准备好连接Oracle数据库地址等五项信息 &#xf…

Java基础(3)String、StringBuffer、StringBuilder

在Java中&#xff0c;字符串处理是日常开发的重要组成部分。主要有三种类型的类用于创建和操作字符串&#xff1a;String、StringBuffer和StringBuilder。虽然这三个类都能够处理字符串&#xff0c;但它们在功能和性能方面存在显著差异。 String String是不可变的&#xff08…

VUE3与Uniapp 五 (v-if、v-show和template的使用)

<template><!-- v-if如果是false&#xff0c;则不会出现在DOM中&#xff0c;不会被渲染&#xff1b;v-show如果为false&#xff0c;则会出现在DOM中&#xff0c;并加载资源&#xff08;如图片&#xff09;&#xff0c;只是CSS隐藏了。 --><view v-if"day1&…

秋招后端开发面试题 - Java多线程(上)

目录 Java多线程前言面试题线程和进程&#xff1f;说说线程有几种创建方式&#xff1f;为什么调用 start() 方法时会执行 run() 方法&#xff0c;那怎么不直接调用 run() 方法&#xff1f;线程有哪些常用的调度方法&#xff1f;线程有几种状态&#xff1f;守护线程了解吗&#…

深入理解汇编中的ZF、OF、SF标志位和条件跳转

本节课在线学习视频&#xff1a;https://pan.quark.cn/s/bbc4781e5336 汇编语言中的程序控制流常依赖于处理器的状态标志来进行决策。在x86架构中&#xff0c;ZF&#xff08;Zero Flag&#xff09;、OF&#xff08;Overflow Flag&#xff09;和SF&#xff08;Sign Flag&#x…

Linux(Centos 7)环境下安装wget,并且更换阿里云镜像

Linux(Centos 7) Minimal 安装后&#xff0c;由于没有预装wget&#xff0c;在使用wget命令去下载安装相关应用时&#xff0c;提示&#xff1a;“wget: command not found” 先在Linux服务器窗口中&#xff0c;输入如下命令&#xff0c;检查Linux服务器有没有安装过wget。 rpm -…