《21天学通C++》(第十六章)STL string类

为什么需要string类?
1.减少在创建和操作字符串方面的操作
2.在内部管理内存分配细节,提高程序稳定性
3.提供复制构造函数和赋值运算符
4.提供截短、查找、删除、比较等函数

1.实例化STL string

#include <iostream>

int main() {
    
    std::string strString;
    strString="hello STL";//动态分配
    std::cout <<strString<< std::endl;
    system("pause");
    return 0;
}

2.访问std::string的字符内容

运算符[]、迭代器和成员函数c_str()

运算符[]

#include <iostream>

int main() {
    
    std::string strString;
    strString="hello STL";
    std::cout <<strString[0]<< std::endl;
    std::cout <<strString[1]<< std::endl;
    std::cout <<strString[2]<< std::endl;
    system("pause");
    return 0;
}

迭代器

#include <iostream>

int main() {
    
    std::string strString;
    strString="hello STL";
    
    std::string::iterator itBegin=strString.begin();
    std::string::iterator itEnd=strString.end();
    std::string::iterator it;

    //遍历输出
    std::cout<<"ALL: "<<std::endl;
    for(it=itBegin;it!=itEnd;++it){
        std::cout<<*it<<std::endl;
    }

    //输出指定位置
    std::string::iterator char1=itBegin;
    std::string::iterator char3=itBegin+2;
    std::string::iterator char4=itBegin+3;

    std::cout<<"appoint: "<<std::endl;
    std::cout<<*char1<<std::endl;
    std::cout<<*char3<<std::endl;
    std::cout<<*char4<<std::endl;

    system("pause");
    return 0;
}

成员函数c_str()

#include <iostream>
#include <string>

int main() {
    std::string strString = "hello STL";
    
    // 获取字符串的指针
    const char* cstr = strString.c_str();
    
    std::cout << cstr[0] << std::endl; 
    std::cout << cstr[1] << std::endl; 
    std::cout << cstr[2] << std::endl; 
    
    system("pause");
    return 0;
}

3.拼接字符串

使用运算符+=append()

运算符+=

#include <iostream>
#include <string>

int main() {
    std::string strString1 = "hello";
    std::string strString2 = "STL";
    std::cout<<strString1<<std::endl;
    
    strString1 +=strString2;
    std::cout<<strString1<<std::endl;
    
    system("pause");
    return 0;
}

成员函数append()

#include <iostream>
#include <string>

int main() {
    std::string strString1 = "hello";
    std::string strString2 = "STL";
    std::cout<<strString1<<std::endl;

    strString1.append(strString2);
    std::cout<<strString1<<std::endl;
    
    system("pause");
    return 0;
}

4.在string中查找字符或子字符串

使用std::string::find()

#include <iostream>
#include <string>

int main() {
    std::string strString = "hello STL";
    
    //查找字符
    size_t pos1=strString.find('l');
    std::cout<<pos1<<std::endl;//只输出2就停止了

    //查找子串
    size_t pos2=strString.find('STL');
    std::cout<<pos2<<std::endl;//输出8,在索引为8的地方匹配

    //从指定位置开始查找
    size_t pos3=strString.find('lo',2);
    std::cout<<pos3<<std::endl;

    //查找字符串多次出现的位置
    size_t pos4=strString.find('l',pos1+1);//pos1为该字符上一次出现的位置
    std::cout<<pos4<<std::endl;//输出为3
    
    //没找到,可以使用使用 std::string::npos判断
    size_t pos_no=strString.find('x');
    if(pos_no==std::string::npos){
        std::cout<<"no find"<<std::endl;
    }
    
    system("pause");
    return 0;
}

5.截短STL string

使用std::string::erase()

#include <iostream>
#include <string>

int main() {

    //从指定位置开始删
    std::string str1 = "Hello, World!";
    str1.erase(8); 
    std::cout<<str1<<std::endl;// 从索引为8开始删除所有字符,结果为 "Hello, W"

    //删除指定字符
    std::string str2 = "Hello, World!";
    std::string::iterator itBegin=str2.begin();

    str2.erase(itBegin+1);//删除索引为1的字符,输出结果为"Hllo, World!"
    std::cout<<str2<<std::endl;

    //删除指定范围
    std::string str3 = "Hello, World!";
    str3.erase(2,5);
    std::cout<<str3<<std::endl;// 删除索引为2~5,结果为 "HeWorld! "


    system("pause");
    return 0;
}

6.字符串反转

使用std::reverse(),记得添加#include <algorithm>

#include <iostream>
#include <string>
#include <algorithm>

int main() {

    std::string str1 = "Hello, World!";
    std::reverse(str1.begin(),str1.end());
    std::cout<<str1<<std::endl;
	//!dlroW ,olleH
    system("pause");
    return 0;
}

7.字符串大小写转化

使用std::transform(),记得添加#include <algorithm>,参数要使用迭代器

#include <iostream>
#include <string>
#include <algorithm>

int main() {

	//变大写
    std::string str1 = "hello, world!";
    std::transform(str1.begin(),str1.end(),str1.begin(),::toupper);
    std::cout<<str1<<std::endl;

	//变小写
    std::string str2 = "HELLO, WORLD!";
    std::transform(str1.begin(),str1.end(),str1.begin(),::tolower);
    std::cout<<str1<<std::endl;

    system("pause");
    return 0;
}

8.C++14新增的std::string::operasor""s

#include <iostream>
#include <string>
using namespace std;

int main() {
    //普通创建
    string str1 ("hello\0 STL");//只输出hello
    cout << str1 << endl; 

    //operasor""s"创建
    string str ("hello\0 STL"s);//完整输出
    cout << str << endl; 

    system("pause");
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JavaEE 初阶(一)】初识线程

❣博主主页: 33的博客❣ ▶️文章专栏分类:JavaEE◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你了解更多线程知识 目录 1.前言2.进程3.线程4.线程和进程的区别5.Thread创建线程5.1继承Thread创建线程5.2实现R…

非平衡数据处理-SMOTE Tomek算法(互联网最全)

作者Toby&#xff0c;来源公众号&#xff1a;Python风控模型&#xff0c;非平衡数据处理-SMOTE Tomek算法 之前Toby老师讲了非平衡数据处理相关知识&#xff0c;具体内容和链接如下。 imbalanced data机器学习非平衡数据处理 Python非平衡数据处理_SMOTE-ENN 方法 非平衡数…

【SSM进阶学习系列丨分页篇】PageHelper 分页插件导入集成实践

文章目录 一、说明什么是分页PageHelper介绍 二、导入依赖三、集成Spring框架中四、编写Service五、编写Controller六、编写queryAllByPage页面展示数据 一、说明 什么是分页 ​ 针对分页&#xff0c;使用的是PageHelper分页插件&#xff0c;版本使用的是5.1.8 。 ​ 参考文档…

虚拟机网络实现桥接模式

虚拟机网络实现桥接模式 虚拟化软件&#xff1a;VMware 17 Linux&#xff1a;rocky8_9 主机&#xff1a;Win10 文章目录 虚拟机网络实现桥接模式1. 桥接模式介绍2. 查看Win本机的网络信息&#xff08;以笔记本电脑以WiFi联网为例&#x…

【Canvas与艺术】录王昌龄出塞诗“秦时明月汉时关”

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>使用HTML5/Canvas绘制秦时明月汉时关</title><style type&q…

【论文阅读】Sparse is Enough in Scaling Transformers

Sparse is Enough in Scaling Transformers 论文地址摘要1 介绍2 相关工作模型压缩。模型修剪模型蒸馏。稀疏注意力。张量分解。稀疏前馈。 3 Sparse is Enough3.1 稀疏前馈层3.2 稀疏 QKV 层3.3 稀疏损失层。 4 长序列的稀疏性4.1 长序列架构4.2 内存效率的可逆性4.3 泛化的循…

# 从浅入深 学习 SpringCloud 微服务架构(七)Hystrix(4)

从浅入深 学习 SpringCloud 微服务架构&#xff08;七&#xff09;Hystrix&#xff08;4&#xff09; 一、hystrix&#xff1a;使用 turbine 聚合所有的 hytrix 的监控数据测试。创建父工程 spring_cloud_hystrix_demo&#xff0c;导入相关依赖坐标。并在父工程 spring_cloud_…

C++校招八股

c类的访问权限与继承方式 公有成员在任何地方都可以被访问&#xff0c;包括类的外部和派生类。受保护成员在类的内部和派生类中可以被访问&#xff0c;但在类的外部不可访问。 私有成员只能在类的内部访问&#xff0c;包括类的成员函数和友元函数&#xff0c;不允许在类的外部…

MySQL45讲(一)(45)

如果使用的是unsigned int 做的主键&#xff0c;如果你用完了&#xff0c;在insert直接就是报冲突的错误 碰到这种情况&#xff0c;只能进行修改字段的属性了&#xff0c;把他换成big unsigned 了&#xff0c;所以建表对字段定义的时候就需要判断好&#xff0c;是否会超过 对于…

我的创作纪念日—128天的坚持|分享|成长

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&am…

H3C MSTP 实验

H3C MSTP 实验 实验拓扑 ​​ 实验需求 所有交换机上创建 Vlan10&#xff0c;Vlan20&#xff0c;Vlan30 和 Vlan40所有交换机之间的端口配置为 Trunk&#xff0c;并放行相关 VLAN按照图示分区域配置 MSTP&#xff0c;并配置主备根网桥 实验步骤 VLAN基础配置&#xff08;…

RateLimiter 限流 —— 通过切面对单个用户进行限流和黑名单处理

关于登录的安全性管理有较多的手段&#xff0c;包括&#xff1b;设备信息、IP信息、绑定的信息、验证码登各类方式。不过在一些网页版的登录中&#xff0c;如果有人想办法把你的验证码给我&#xff0c;我就可以登录你的账户&#xff0c;查看你的数据。对于一些不法分子通过让你…

windows 驱动开发-DMA技术(二)

前面描述了DMA技术中适配器相关的部分以及DMA的分类&#xff0c;接下来看一下系统具体在支持两种DMA时候的操作的细微差别。 此处解释一下Scatter/Gather&#xff0c;这个也翻译为散点/收集&#xff0c;是指指示设备能够读取或写入内存中的任何区域&#xff0c;而不仅仅是特定…

构建智能化商旅服务:酒店中台云服务架构设计与实践

随着商旅行业的不断发展和智能化趋势的兴起&#xff0c;酒店中台云服务成为了提升服务质量和效率的关键。本文将探讨酒店商旅中台云服务的架构设计与实现&#xff0c;介绍其关键特点和最佳实践&#xff0c;助力商旅行业迈向智能化未来。 1. **需求分析与场景设计&#xff1a;*…

【阿里云服务器】ubuntu 22.04.1安装docker以及部署java环境

我的服务器配置是2GB CPU 2GB 内存 Ubuntu22.04 目录 一、阿里云 ubuntu 22.04.1安装docker 二、docker基础命令 三、Windows电脑访问云服务器 四、安装java环境 安装OpenJDK 8&#xff08;可以根据需要安装其他版本的JDK&#xff09; 安装java的依赖管理工具maven 一、…

基于yolov2深度学习网络模型的鱼眼镜头中人员检测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 load yolov2.mat% 加载训练好的目标检测器 img_size [448,448]; imgPath test/; % 图像…

LeetCode 15 —— 三数之和

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 首先我们对数组进行从小到大排序&#xff0c;然后遍历数组 [ 0 , n u m s . s i z e ( ) − 3 ] [0,nums.size()-3] [0,nums.size()−3] 作为三元组中的 a a a&#xff0c;由于三元组的索引互不相同&#xff0c…

文件与IO基础常识知识

在这里&#xff0c;只介绍理论知识&#xff0c;不介绍代码。 目录 1.IO 1.1.字面概念 1.2.输入输出模型 2.文件 2.1.文件目录 2.2.文件路径 2.3.文件分类 1.IO 为了我们接下来学习的文件IO&#xff0c;所以我们先来认识什么是IO。 1.1.字面概念 &#xff08;1&#x…

【知识加油站】——机电产品数字孪生机理模型构建

明确一种多领域、多层次、参数化、一致性的机电一体化装备数字孪生机理模型构建准则&#xff01; 关键词英文简称&#xff1a; 数字孪生&#xff1a;DT物联网&#xff1a;IoT网络物理系统&#xff1a;CPS高级架构&#xff1a;HLA统一建模语言&#xff1a;UML数控机床&#xf…

Sarcasm detection论文解析 |A2Text-Net:一种用于讽刺检测的新型深度神经网络

论文地址 论文地址&#xff1a;A2Text-Net: A Novel Deep Neural Network for Sarcasm Detection | IEEE Conference Publication | IEEE Xplore github:lliyuan1117/A2Text-Net (github.com) 论文首页 A2Text-Net&#xff1a;一种用于讽刺检测的新型深度神经网络 &#x1f4c5…
最新文章