C++:String类应用

news2024/12/28 4:49:56

string对象的构造

//string()  string(const string &s)  string(const char *s) string(first,last)
void TestString01()
{
    string s1;
    string s2("hello");

    string s3(s2);

    const char* p = "hello";
    string s4(p, p + 2);

    cin >> s1;
    cout << s1 << " " << s2 << " " << s3 << " " << s4 << endl;
}

上机实践:
在这里插入图片描述

容器:
size() length() :获取字符串长度
capacity():获取空间大小
empty():检测字符串是否为空串
clear():将有效元素清空
reserve(size_t newcapacity):进行扩容
resize(size_t newcapacity,char ch):修改空间,多余空间使用ch填充,未多余不用补充

void TestString02()
{
    string s("hello");
    cout << s.size() << endl;
    cout << s.length() << endl;
    cout << s.capacity() << endl;
    s.reserve(100);
    cout << s.capacity() << endl;
    s.reserve(20);
    cout << s.capacity() << endl;
    //缩小时临界位置
    s.reserve(16);
    cout << s.capacity() << endl;
    s.reserve(15);
    cout << s.capacity() << endl;
    s.reserve(2);
    cout << s.capacity() << endl;

    if (s.empty())
    {
        cout << "s is empty!!" << endl;
    }
    else
        cout << "s is not empty!!" << endl;

    s.clear();

    if (s.empty())
    {
        cout << "s is empty!!" << endl;
    }
    else
        cout << "s is not empty!!" << endl;
    cout << s.size() << endl;


    string ss(16, 'A');
    cout << ss.capacity() << endl;
    ss.reserve(10);
    cout << ss.capacity() << endl;
    ss.resize(20, 'b');
    cout << ss << endl;
}

上机实践:
在这里插入图片描述

修改:
operator+=:在string之后拼接:单个字符 C格式的字符串 string对象
append:在string之后拼接:单个字符 C格式的字符串 string对象
push_back(char ch):往string尾部插入ch
insert(size_t poosl,size_t n,char c):在poosl位置插入n个c
erase(size_t pos,size_t n):在pos位置删除n个

void TestString03()
{
    string s = ("hello");
    s.push_back(' ');

    //拼接 C格式字符串
    s += "word";

    //拼接对象
    string ss("!!");
    s += ss;
    cout << s << endl;

    s.append(1, ' ');
    s.append("123");
    s.append(ss);
    cout << s << endl;

    s.insert(0, 3, 'a');
    cout << s << endl;
    s.insert(0, "bite");
    cout << s << endl;
    s.insert(7, ss);
    cout << s << endl;
    s.insert(s.begin(), ss.begin(), ss.end());
    cout << s << endl;

    s.erase(0, 7);
    cout << s << endl;
    s.erase(s.begin()+4);//删除s第四个字符
    cout << s << endl;
    s.erase(s.begin(), s.end());//清空
    cout << s << endl;
}

上机实践:
在这里插入图片描述

借助push_back方式演示string的扩容机制(在VS2019,string按照1.5倍扩容)

void TestString04()
{
    //扩容需要  申请新空间  拷贝旧空间  释放旧空间
    string s;
    s.reserve(100);
    size_t cap = 0;
    for (size_t i = 0; i < 100; i++)
    {
        s.push_back('A');//s+='A
        if (cap != s.capacity())
        {
            cap = s.capacity();
            cout << cap << endl;
        }
    }
}

上机实践:sdnimg.cn/fda48d172b2e431fa067dc37f6ace63c.png)

迭代器:
正向:begin()|end() 反向:rbegin()|rend()

void TestString05()
{
    string s("123456789");
    //string 遍历
    //for下标方式
    for (size_t i = 0; i < s.size(); i++)
    {
        cout << s[i];
    }
    cout << endl;

    //其次使用范围for
    for (auto e : s)
    {
        cout << e;
    }
    cout << endl;

    //使用迭代器遍历
    //string::iterator it = s.begin();
    auto it = s.begin();//C++11
    while (it != s.end())
    {
        cout << *it;
        it++;
    }
    cout << endl;
    //反向迭代器
    //string::reverse_iterator rit = s.rbegin();
    auto rit = s.rbegin();//C++11
    while (rit != s.rend())
    {
        cout << *rit;
        rit++;
    }
    cout << endl;
}

上机实践:
在这里插入图片描述

#include<algorithm>
void TestString06()
{
    string s("123456789");
    cout << s << endl;

    //对s逆序
    reverse(s.begin(), s.end());
    cout << s << endl;

    sort(s.begin(), s.end());
    cout << s << endl;
}

上机实践:
在这里插入图片描述

int atoi(const char* s):字符串转换整型数字
c_str():返回string对象中存储字符串的空间首地址
size_t find(char c,size_t pos=0):从pos位置开始查找字符c
size_t rfind(char c):从后往前找
string substr(size_t pos = 0,size_t n = npos):从pos位置开始,截取n个字符 如果n没有传递,则从pos一直到末尾,如果pos和n都没有传递,则将字符串整个截取

void TestString07()
{
    string s("1234512");
    int ret = atoi(s.c_str());
    cout << ret << endl;

    //找到s中1
    int pos = 0;
    while (true)
    {
        pos = s.find('1', pos);
        if (pos == string::npos)//没有找到find返回npos
            break;
        cout << pos << endl;
        pos += 1;
    }

    //获取文件的后缀
    string ss("123.txt.cpp");
    size_t Pos = ss.rfind('.') + 1;//返回c位置

    string posFix = ss.substr(Pos);
    cout << posFix << endl;
}
void GetLastWordLength()
{
    string s;
    while (getline(cin,s))//getlin获取一整行字符包含空格
    {
        size_t start = s.rfind(' ') + 1;
        string word = s.substr(start);
        cout << word << endl;
    }
}

上机实践:
在这里插入图片描述

int atoi(const char* s):字符串转换整型数字
char* itoa(int value,char* str,int base):将数字转换为字符串,base为2~36进制
int sprintf(char* str,const char* format,int value):将value转换为format类型存放在str

void TestString08()//字符串相加
{
    string s1, s2;
    cin >> s1 >> s2;
    int value = atoi(s1.c_str());
    value += atoi(s2.c_str());
    char ch[32] = { 0 };
    sprintf(ch, "%d", value);
}

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

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

相关文章

微信小程序 Springboot旅游景点酒店预订管理系统 java

功能模块划分 &#xff08;1&#xff09;用户信息管理模块 用户管理模块主要是对用户信息进行管理。包括&#xff1a; 用户的注册&#xff1a;实现用户信息的注册&#xff0c;用户注册是的信息校验&#xff0c;用户信息的保存。 用户的登录&#xff1a;检验用户是否为该网站的合…

如何打造优秀高绩效的团队?Google亚里士多德计划揭开谜底!

研究人员通过亚里士多德计划开展研究&#xff0c;通过对大量团队效率进行定性&#xff08;360主观评估&#xff09;与定量&#xff08;产出成果度量&#xff09;结合的统计评估&#xff0c;筛选出左右着团队动态的五个关键支柱&#xff1a;心理安全、可靠性、结构和清晰度、意义…

Nginx与Upstream之间产生大量TIME_WAIT连接的解决办法

1. 现象 Nginx反向代理了一个Java服务&#xff0c;QPS大概是200&#xff0c;问题发生时的Nginx配置&#xff1a; location / {proxy_pass http://192.168.3.4:18600; }在上游Java服务器上可以观察到大量&#xff08;约2000个&#xff09;的TIME_WAIT状态的网络连接 从Nginx…

一位十年测试老前辈的修炼之路,希望能帮你点清现实

对于刚进入软件测试工作岗位的新人&#xff0c;如何快速、健康的在职业道路上成长&#xff0c;作者谈了几点自己看法&#xff1a; 1、兴趣是最好的老师 对于软件测试工作&#xff0c;通常是比较枯燥的&#xff0c;如果没有兴趣很难做到持久。 我最近参与了一个软件测试项目&a…

Plecs电力电子仿真专业教程-第一季 第三节 Plecs界面介绍

Plecs电力电子仿真专业教程-第一季 第三节 Plecs界面介绍 Plecs仿真软件主要包含两个部分&#xff1a;元件库窗口和电路图编辑窗口。元件库窗口主要用于选择仿真所用到的电子元器件&#xff0c;通过拖拽的方式可以将所需要的元器件放置在主电路图窗口中。 主界面窗口如下&…

网络类型、路由封装实验

实验1. 拓扑搭建2. 配置各路由器物理接口IP地址边界路由器到ISP通测试PAP认证CHAP认证R3与R5间使用HDLC封装R1与R4为GRE环境R1、R2、R3为MGRE环境私有网络基于RIP全网可达给PC配置IP地址测试ping通性环境&#xff1a;华为模拟器 实验要求 1. 拓扑搭建 2. 配置各路由器物理接口…

【目标检测】MMYOLO | 如何使用 MMYOLO 训练模型

文章目录一、MMYOLO 简介1.1 MMYOLO 的安装和简单训练1.2 详细配置参数1.3 构建 Cat 数据集的 Config 文件1.3.1 数据集分布可视化1.3.2 Anchor-based 方法中 anchor 尺寸的优化1.3.3 可视化数据处理二、MMYOLO 的框架结构2.1 以 YOLOv5 为例来说明 MMYOLO 的框架结构2.1.1 Bac…

AcWing 1077. 皇宫看守(树形DP + 状态机DP)

AcWing 1077. 皇宫看守&#xff08;树形DP 状态机DP&#xff09;一、问题二、分析1、思路分析2、状态表示3、状态转移4、循环设计5、初末状态三、代码一、问题 二、分析 1、思路分析 在讲解这道题之前&#xff0c;大家需要对状态机DP有一定的了解&#xff0c;如果不了解或者…

2022尚硅谷SSM框架跟学(九)Spring MVC基础四

2022尚硅谷SSM框架跟学 九 Spring MVC基础四14.SpringMVC执行流程14.1SpringMVC常用组件14.2DispatcherServlet初始化过程(Init)(1).初始化WebApplicationContext(2).创建WebApplicationContext(3).DispatcherServlet初始化策略14.3DispatcherServlet调用组件处理请求(Service)…

CentOS环境安装ffmpeg

这是我在网上搜罗的方法&#xff0c;亲测好用 &#xff0c;借此写篇文章&#xff0c;分享给大家。温馨提示&#xff1a;安装ffmpeg过程会很慢&#xff0c;因为它集成的功能太多了&#xff0c;所以在安装过程中不必长时间等待&#xff0c;执行命令后可暂时先去忙别的事&#xff…

Unity URP无法设置Transparency Sort Mode

Unity URP无法设置Transparency Sort Mode问题解决方案参考问题 一般使用Unity制作2D游戏时会将Transparency Sort Mode设置为Custom Axis并将Transparency Sort Axis设置为0,1,0来方便Spirte排序 但是当渲染管线切换为Universal Render Pipeline(通用渲染管线)时 Transpare…

JAVA将百万级数据高效的导出到EXCEL表单

遇到的问题 1.list集合太大&#xff0c;触发oom 2.导出excel数据量太大内存占满&#xff0c;没输出到硬盘前已经出发oom 接下来尝试用poi解决 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version&…

如何在Exchange Online中使用使用反垃圾邮件策略将域列入白名单

将域列入白名单 打开安全门户单击威胁策略单击反垃圾邮件策略单击反垃圾邮件入站策略(默认)单击“允许域”Exchange Online已启用默认的反垃圾邮件策略。策略的名称为Default。不建议使用这些电子邮件,因为它们会使你的组织容易受到来自该域或发件人的欺骗电子邮件的攻击。我…

【环境配置】在Ubuntu中使用Docker20.10.23配置FATE1.10.0(单机部署)

前言 本文讲解了在Ubuntu22中使用Docker20配置FATE1.10.0的方法 分为官方文档与我自己的实际操作两个部分 需要先安装docker&#xff0c;可以看我的上一篇文章 安装流程前言一、FATE单机部署指南&#xff08;官方&#xff09;1. 说明2. 使用Docker镜像安装FATE&#xff08;推荐…

Maven(mvn)基础

Maven&#xff08;mvn&#xff09;基础 文章目录Maven&#xff08;mvn&#xff09;基础传统项目管理状态分析Maven是什么Maven的作用下载与安装1.下载安装2.环境变量配置Maven基础概念仓库坐标本地仓库配置全局setting与用户setting第一个Maven项目(手动)Maven工程目录结构Mave…

蓝桥杯-长草

没有白走的路&#xff0c;每一步都算数&#x1f388;&#x1f388;&#x1f388; 题目描述&#xff1a; 已知一个长度为n&#xff0c;宽度为m的长方形草地&#xff0c;但不是每一个方格里面都长满了草&#xff0c;只有部分的方格张了些草。并且每个月草会向上下左右都繁殖一个…

Linux中MMU内存管理【进阶学习】

前言 现代操作系统普遍采用虚拟内存管理&#xff08;Virtual Memory Management&#xff09;机制&#xff0c;这需要处理器中的MMU&#xff08;Memory Management Unit&#xff0c;内存管理单元&#xff09;提供支持。 MMU&#xff08;Memory Management Unit) &#xff1a;内…

微信小程序023安全科普之家在线考试错题集

开发语言&#xff1a;Java 小程序前端框架&#xff1a;uniapp 小程序运行软件&#xff1a;微信开发者 后端技术:Ssm(SpringSpringMVCMyBatis)vue.js 后端开发环境:idea/eclipse 数据库:mysql 本系统设计的是一个“科普之家”知识在线考试小程序的网站&#xff0c;此网站使用户实…

计算机网络基础知识点

计算机网络基础知识点计算机网络1、概述1.1 计算机网络基本概念1.2 互联网核心部分:数据交换1.3 计算机网络的性能指标1.4 计算机网络体系结构2、物理层2.1 物理层基本概念2.2 数据通信系统模型2.3 数据编码技术2.4 信道复用技术3、数据链路层3.1 概述3.2 PPP协议3.3 CSMA/CD3.…

Python垃圾回收机制——完美讲解

Garbage collection(GC) 现在的高级语言如java&#xff0c;c#等&#xff0c;都采用了垃圾收集机制&#xff0c;而不再是c&#xff0c;c里用户自己管理维护内存的方式。自己管理内存极其自由&#xff0c;可以任意申请内存&#xff0c;但如同一把双刃剑&#xff0c;为大量内存泄…