STL - String容器

news2024/11/23 12:09:20

1. string基本概念

本质:
        string是C++风格的字符串,而string本质上是一个类

string和char *的区别:
        char *是一个指针
        string是一个类,类内部封装了char *,管理这个字符串,是一个char *型的容器

特点:
        string内部封装了很多成员方法
        例如:查找find,拷贝copy,删除delete,替换replace,插入insert
        string管理char*所分配的内存,不要担心复制越界和取值越界等,由类内部进行负责

2.string构造函数

#include <algorithm> //标准算法头文件
#include <iostream>
#include <vector>
using namespace std;
// string的构造函数

void test02()
{
    string s1; //默认构造
    const char* str = "hello"; //加const的原因,因为"hello"是一个字符常量,常量保存在全局区,声明就也需要在全局
    string s2(str);

    cout << s2 << endl;

    string s3(s2);
    cout << s3 << endl;

    string s4(10, 'a'); //输出10个a
    cout << s4 << endl;
}
int main()
{
    test02();
    return 0;
}

 总结:string的多种构造方式没有可比性,灵活使用即可。

3. string赋值操作

功能描述:
        给string字符串进行赋值

#include <algorithm> //标准算法头文件
#include <iostream>
#include <vector>
using namespace std;
// string的赋值操作

void test02()
{
    // 1. 利用 const char* 赋值
    string s1;
    s1 = "hello world";
    // 2.字符串赋值
    string s2;
    s2 = s1;
    // 3.字符赋值给字符串
    string s3;
    s3 = 'a';

    // assign赋值
    //  4.字符串赋值
    string s4;
    s4.assign("hello C++");
    // 5.把字符串的前n个赋值给当前字符串
    string s5;
    s5.assign("hello C++", 5); //把前五个字符赋值
    cout << "s5=" << s5 << endl;
    // 6.把字符串s赋值给当前字符
    string s6;
    s6.assign(s5);
    cout << "s6=" << s6 << endl;

    // 7.用n个字符c赋值给当前字符串
    string s7;
    s7.assign(2, 'a');
    cout << "s7=" << s7 << endl;
}
int main()
{
    test02();
    return 0;
}

总结:
        string的赋值方式很多,operator=比较实用

4. string字符串拼接

功能描述:
        实现在字符串末尾拼接字符串

#include <algorithm> //标准算法头文件
#include <iostream>
#include <string>
#include <vector>
using namespace std;

// string的字符串拼接

void test01()
{
    string s1 = "我";
    s1 += "是";
    cout << "s1=" << s1 << endl;

    s1 += 'a';
    cout << "s1=" << s1 << endl;

    string s2 = "你好";
    s2 += s1;
    cout << "s2=" << s2 << endl;

    string s3 = "I";
    s3.append("love");
    cout << "s3=" << s3 << endl;
    s3.append("you test a test", 4); //去前4个
    cout << "s3=" << s3 << endl;

    s3.append(s2);
    cout << "s3=" << s3 << endl;
    s3.append(s2, 0, 4); //从s2的0位开始追加4位 ,一个汉字是2位字符
    cout << "s3=" << s3 << endl;
}
int main()
{
    test01();
    return 0;
}

 总结:字符串拼接的重载版本很多,初学只要记住几种就好

5. string查找和替换

功能描述:
        查找:查找指定字符串是否存在
        替换:在指定的位置替换字符串

 

#include <algorithm> //标准算法头文件
#include <iostream>
#include <string>
#include <vector>
using namespace std;

// 字符串的查找和替换

void test01()
{
    // find 从左往右
    string s1 = "abcdefgde";
    int pos = s1.find("de", 0); //第二个是下标,默认从0开始, 返回值是找到的下标,-1是没找到

    cout << pos << endl;

    // rfind 从右边开始查找
    pos = s1.rfind("de");
    cout << pos << endl;
}

void test02()
{
    string s1 = "abcdefg";
    
    s1.replace(1, 3, "1111"); //从1到位置3个字符替换
    cout << "s1=" << s1 << endl;
    
}
int main()
{
    test02();
    return 0;
}

6. string字符串比较

功能描述:
        字符串之间的比较

比较方式:
        字符串比较是按字符的ASCII码进行对比
        = 返回0
        > 返回1
        < 返回-1

#include <algorithm> //标准算法头文件
#include <iostream>
#include <string>
#include <vector>
using namespace std;

// 字符串比较

void test02()
{

    string s1 = "hello1";
    string s2 = "hello";
    if (s1.compare(s2) == 0) { //比较compare
        cout << "相等" << endl;
    } else if (s1.compare(s2) == 1) {
        cout << "大于" << endl;
    } else {
        cout << "小于" << endl;
    }
}
int main()
{
    test02();
    return 0;
}

7. sting字符串存取

#include <algorithm> //标准算法头文件
#include <iostream>
#include <string>
#include <vector>
using namespace std;

// 字符串存取

void test02()
{
    string str1 = "hello C++";
    cout << "str1 = " << str1 << endl;
    //两种方法
    // 1.通过【】
    for (int i = 0; i < (int)str1.size(); i++) // str1.size()返回字符串长度
    {
        cout << str1[i] << " ";
    }
    cout << endl;
    // 2.通过at ,at不可以越界,【】可以
    for (int i = 0; i < (long long)str1.size(); i++) {
        cout << str1.at(i) << " ";
    }
    cout << endl;

    //修改单个字符
    str1[0] = 'x';
    cout << "str1 = " << str1 << endl;
    //    cout << str1.at(100) << endl; //崩溃
    cout << str1[100] << endl; //返回空
}
int main()
{
    test02();
    return 0;
}

 8. string插入和删除

 

#include <algorithm> //标准算法头文件
#include <iostream>
#include <string>
#include <vector>
using namespace std;

// 字符串插入 删除

void test02()
{
    string str1 = "hello";
    //插入
    str1.insert(1, "222"); //在位置1插入字符串
    cout << "str1 = " << str1 << endl;
    //删除
    str1.erase(1, 3); //从第1个位置起,删除3个
    cout << "str1 = " << str1 << endl;
}
int main()
{
    test02();
    return 0;
}

总结:插入和删除的下标都是从0开始

9. sting字串

功能描述:
        从字符串中获取想要的字符串

#include <algorithm> //标准算法头文件
#include <iostream>
#include <string>
#include <vector>
using namespace std;

// 字符串字串

void test02()
{
    string str1 = "hello";
    string sub = str1.substr(1, 2); //从1开始截取2个
    cout << "sub=" << sub << endl;
    //实用操作
    string email = "zhangsan@qq.com";
    int pos = email.find("@"); //找到返回下标 8
    cout << pos << endl;
    string username = email.substr(0, pos); //从0开始截取8个
    cout << "username=" << username << endl;
}

int main()
{
    test02();
    return 0;
}

 总结:灵活的运用求字串功能,可以在实际开发中获取有用的信息

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

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

相关文章

本地小说阅读网站打造

目录 一、本地小说网站总体组织框架 1、所需的VUE库和elementLib以及JQ库 2、本地目录设计 3、整体代码样式 二、正文核心代码 1、引入element 样式&#xff0c;和自定义的样式 2、引入JS 3、自定义Header组件 1&#xff09;vue 定义MyHeader组件 2&#xff09;MyHead…

Mapstruct的具体介绍与使用

我是 ABin-阿斌&#xff1a;写一生代码&#xff0c;创一世佳话&#xff0c;筑一览芳华。 如果小伙伴们觉得我的文章不错&#xff0c;记得一键三连哦 文章目录一、mapstruct简介二、mapstruct与其他映射对比三、mapstruct底层原理解析1、Java动态编译四、具体使用1、依赖导入2、…

Linux开发工具的使用(三)

文章目录Linux开发工具的使用&#xff08;三&#xff09;1. 缓冲区1.1 理解\r和\n1.2 缓冲区的初步理解1.3 倒计时小程序实现1.4 进度条小程序实现2. 分布式版本控制系统-git使用2.1 git历史2.2 git版本控制理解2.3 git使用2.3.1 gitee搭建远程仓库2.3.2 开始配置3. Linux调试器…

Revit教程:创建“幕墙竖梃族”的方法步骤

幕墙竖梃族分为两个组成部分&#xff1a;“幕墙竖梃”和“公制轮廓-竖梃”&#xff0c;前者是基于后者轮廓的一个实体拉伸&#xff0c;两者的关系类似于实体与草图。轮廓族及门窗族 (公制门-幕墙&#xff0c;公制窗-幕墙而非公制门与公制窗)可以嵌套入CAD详图或Revit详图&#…

93、【树与二叉树】leetcode ——222. 完全二叉树的节点个数:普通二叉树求法+完全二叉树性质求法(C++版本)

题目描述 原题链接&#xff1a;222. 完全二叉树的节点个数 解题思路 1、普通二叉树节点个数求法 &#xff08;1&#xff09;迭代&#xff1a;层序遍历BFS 遍历一层获取一层结点 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode …

【九】Netty HTTP+XML协议栈开发

HTTP协议介绍业务场景流程图技术栈设计流程图的分析:Step 1Step2Step3Step4Step5分析结果开发开发流程图代码jar 依赖代码结构如图pojo 包request包response 包client 包server包编码解码基类代码说明测试服务端打印结果客户端打印结果总结介绍 由于HTTP协议的通用性&#xff…

使用js实现一个可以【放烟花】的小游戏

放烟花游戏需求&#x1f447;核心玩法&#x1f447;&#x1f447;界面原型&#x1f447;&#x1f447;成品演示&#x1f447;游戏开发1.游戏素材准备2.代码实现1.创建index.html页面2.首页-开始3.加载烟花音效4.重玩儿放烟花的小游戏。点击页面放烟花。兼容移动端。 游戏需求 …

作为普通网民,这些“实用电脑神器”,值得你知道

国内软件夹缝里求生存&#xff0c;由于某些不良软件&#xff0c;许多人对于国产软件认识多为“流氓、捆绑、多广告”&#xff0c;其实并非如此&#xff0c;下面几款让你刮目相看&#xff0c;扭转观念。 1、图片视频画质增强器 这是一款功能极其强大的图片与视频画质增强器&…

阿里云数据湖3.0解决方案两度登上InfoQ 2022年度榜单

经过一个多月的层层竞选&#xff0c;【阿里云数据湖 3.0 解决方案】从 130 多个方案中脱颖而出&#xff0c;荣获 InfoQ 2022 年度中国技术力量年度榜单《十大云原生创新技术方案》&《云原生十大场景化落地方案》双料大奖&#xff0c;这是头部技术媒体对阿里云存储的再一次认…

低代码是什么?有什么优势?一文看懂LowCode

低代码到底是什么&#xff1f;用最简单的方式告诉我&#xff1f;低代码是近两年来一个很热门的概念&#xff0c;尤其是疫情的影响&#xff0c;市场对低代码的需求不断增加&#xff0c;但到底什么是低代码&#xff1f;它到底有什么好处&#xff1f;这篇就为大家解答这个问题&…

vue2.0 插槽不是响应性的

请注意插槽不是响应性的。如果你需要一个组件可以在被传入的数据发生变化时重渲染&#xff0c;我们建议改变策略&#xff0c;依赖诸如 props 或 data 等响应性实例选项。-- vm.$slots 问题描述 项目中自定了组件 widget&#xff0c;作为容器&#xff0c;其中 header 部分做了预…

SCI投稿:MDPI旗下期刊Mathematics投稿经历

最近写了篇论文&#xff0c;由于国内期刊现状&#xff08;懂的都懂&#xff09;&#xff0c;打算投国外的期刊&#xff0c;看来看去选择投MDPI旗下的Mathematics。手稿经过一轮大修之后顺利收到了Accepted&#xff0c;过程还是比较顺利的&#xff0c;记录一下投稿过程。 论文撰…

Matlab实现的FEMIC的说明书

FEMIC程序是用来反演小回路频域电磁感应数据的。要启动代码,在Matlab命令窗口中输入start,然后点击“Enter”或“返回”按钮。然后会出现FEMIC的主界面,见图1。 它由几个输入区域组成,这几个区分别实现了:加载数据,反演过程控制和最终显示。 图1 主界面 下面对这些输入…

[oeasy]python0045_四种进制_binary_octal_decimal_hexadecimal

四种进制 回忆上次内容 上次研究了 通过 八进制数值 转义 \ooo把(ooo)8进制对应的ascii字符输出 转义序列 \n、\t 是 转义序列\xhh 也是 转义序列\ooo 还是 转义序列 现在 总共有 几种进制 了呢&#xff1f;&#x1f914; 先数一下 树 数树 树 就是这么多棵树 用八进制的…

Redis持久化Redis主从

Redis持久化 RDB持久化 RDB: Redis数据备份文件。简单来说就是把内存中的所有数据都记录到磁盘中。当Redis实例故障重启后&#xff0c;从磁盘读取快照文件&#xff0c;恢复数据。 主要流程 bgsave开始时会fork主进程得到子进程&#xff0c;子进程共享主进程的内存数据。完成f…

误删的文件不在回收站如何找回?分享一些恢复数据的教程

电脑清理的文件数据&#xff0c;一般都会经过回收站。如果想要恢复回来&#xff0c;可以直接打开电脑的回收站来寻找。可凡事都有万一&#xff0c;我们删除的文件不在回收站里面。这是什么原因&#xff1f;误删的文件不在回收站如何找回&#xff1f;今天就来分享如何恢复不在回…

git快速学习笔记

1.目标 了解Git基本概念能够概述git工作流程能够使用Git常用命令熟悉Git代码托管服务能够使用idea操作git 2.概述 2.1开发中的实际场景 场景一&#xff1a;备份 小明负责的模块就要完成了&#xff0c;就在即将Release之前的一瞬间&#xff0c;电脑突然蓝屏&#xff0c;硬盘光…

C语言进阶(6)——结构体

文章目录1.结构体的基础知识2.结构体的声明3.特殊的声明4.结构体的自引用6. 结构体的内存对齐7.修改默认对齐数8.结构体传参位段1、位段定义2. 位段的内存分配3.位段的跨平台问题4.位段的运用场景1.结构体的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的…

51单片机——LED基础

从小就对电器元件比较感兴趣吧&#xff0c;经常拿坏的电器里面的芯片拆下来玩&#xff0c;甚至那些没坏的电器&#xff0c;比如我家的电视&#xff0c;也会希望它能坏掉&#xff0c;我好去看看里面是什么样子的&#xff0c;为什么能播放节目……&#xff0c;所以我第一眼看到51…

阿里云-解决EDAS创建应用文件过大无法上传部署问题

文章目录1、背景2、问题具体描述3、解决方案3.1、 2种方案3.2 、OSS 简介3.3、 OSS 功能特性4、 OSS 实操4.1、 上传程序文件4.2、 创建应用1、背景 在一次使用阿里云-EDAS发布应用服务过程中出现EDAS 上传应用包过大无法上传现象。 2、问题具体描述 最近在使用阿里云-EDAS发…