C++的string容器->基本概念、构造函数、赋值操作、字符串拼接、查找和替换、字符串比较、字符存取、插入和删除、子串

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

//string的构造函数
/*
-string();                      //创建一个空的字符串 例如: string str;
-string(const char* s);           //使用字符串s初始化
-string(const string& str);   //使用一个string对象初始化另一个string对象
-string(int n, char c);      //使用n个字符c初始化
*/
void test01()
{
    string s1; //默认构造,创建空字符串,调用无参构造函数
    cout << "str1 = " << s1 << endl;

    const char* str = "hello world";
    string s2(str); //把c_string转换成了string

    cout << "s2 = " << s2 << endl;

    string s3(s2); //调用拷贝构造函数
    cout << "s3 = " << s3 << endl;

    string s4(10, 'a');
    cout << "s4 = " << s4 << endl;
}

int main()
{
    test01();
    system("pause");
    return 0;
}

#include<iostream>
using namespace std;
#include <string>
//string赋值操作
/*
* string& operator=(const char* s);            //char*类型字符串 赋值给当前的字符串
* string& operator=(const string &s);          //把字符串s赋给当前的字符串
* string& operator=(char c);                   //字符赋值给当前的字符串
* string& assign(const char *s);               //把字符串s赋给当前的字符串
* string& assign(const char *s, int n);        //把字符串s的前n个字符赋给当前的字符串
* string& assign(const string &s);             //把字符串s赋给当前字符串
* string& assign(int n, char c);               //用n个字符c赋给当前字符串
*/
void test01()
{
    string str1;
    str1 = "hello world";
    cout << "str1 = " << str1 << endl;

    string str2;
    str2 = str1;
    cout << "str2 = " << str2 << endl;

    string str3;
    str3 = 'a';
    cout << "str3 = " << str3 << endl;

    string str4;
    str4.assign("hello c++");
    cout << "str4 = " << str4 << endl;

    string str5;
    str5.assign("hello c++",5);
    cout << "str5 = " << str5 << endl;

    string str6;
    str6.assign(str5);
    cout << "str6 = " << str6 << endl;

    string str7;
    str7.assign(5, 'x');
    cout << "str7 = " << str7 << endl;
}

int main()
{
    test01();
    system("pause");
    return 0;
}

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

//string字符串拼接
/*
* string& operator+=(const char* str);                   //重载+=操作符
* string& operator+=(const char c);                      //重载+=操作符
* string& operator+=(const string& str);                 //重载+=操作符
* string& append(const char *s);                         //把字符串s连接到当前字符串结尾
* string& append(const char *s, int n);                  //把字符串s的前n个字符连接到当前字符串结尾
* string& append(const string &s);                       //同operator+=(const string& str)
* string& append(const string &s, int pos, int n);       //字符串s中从pos开始的n个字符连接到字符串结尾
*/
void test01()
{
    string str1 = "我";

    str1 += "爱玩游戏";

    cout << "str1 = " << str1 << endl;
    
    str1 += ':';

    cout << "str1 = " << str1 << endl;

    string str2 = "LOL DNF";

    str1 += str2;

    cout << "str1 = " << str1 << endl;

    string str3 = "I";
    str3.append(" love ");
    str3.append("game abcde", 4);
    //str3.append(str2);
    str3.append(str2, 4, 3); // 从下标4位置开始 ,截取3个字符,拼接到字符串末尾
    cout << "str3 = " << str3 << endl;
}
int main()
{
    test01();
    system("pause");
    return 0;
}

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

//string查找和替换
/*
* int find(const string& str, int pos = 0) const;           //查找str第一次出现位置,从pos开始查找
* int find(const char* s, int pos = 0) const;               //查找s第一次出现位置,从pos开始查找
* int find(const char* s, int pos, int n) const;            //从pos位置查找s的前n个字符第一次位置
* int find(const char c, int pos = 0) const;                //查找字符c第一次出现位置
* int rfind(const string& str, int pos = npos) const;       //查找str最后一次位置,从pos开始查找
* int rfind(const char* s, int pos = npos) const;           //查找s最后一次出现位置,从pos开始查找
* int rfind(const char* s, int pos, int n) const;           //从pos查找s的前n个字符最后一次位置
* int rfind(const char c, int pos = 0) const;               //查找字符c最后一次出现位置
* string& replace(int pos, int n, const string& str);       //替换从pos开始n个字符为字符串str
* string& replace(int pos, int n,const char* s);            //替换从pos开始的n个字符为字符串s
*/
void test01()
{
    //1.查找
    string str1 = "abcdefgde";
    int pos = str1.find("de");
    if (pos == -1)
    {
        cout << "未找到" << endl;
    }
    else
    {
        cout << "pos = " << pos << endl;
    }
    //rfind和find区别
    //rfind从右往左查找   find从左往右查找
    pos = str1.rfind("de");
    cout << "pos = " << pos << endl;
}
void test02()
{
    //2.替换
    string str1 = "abcdefgde";
    //从1号位置起 3个字符 替换为“1111”
    str1.replace(1, 3, "1111");
    cout << "str1 = " << str1 << endl;
}
int main()
{
    test01();
    test02();
    system("pause");
    return 0;
}

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

//字符串比较
void test01()
{
    string s1 = "hello";
    string s2 = "aello";
    int ret = s1.compare(s2);
    if (ret == 0)
    {
        cout << "s1 等于 s2" << endl;
    }
    else if (ret > 0)
    {
        cout << "s1 大于 s2" << endl;
    }
    else
    {
        cout << "s1 小于 s2" << endl;
    }
}
int main()
{
    test01();
    system("pause");
    return 0;
}

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

//string字符存取
void test01()
{
    string str = "hello world";
    //1.通过[]访问单个字符
    for (int i = 0; i < str.size(); i++)
    {
        cout << str[i] << " ";
    }
    cout << endl;
    //2.通过at方式访问单个字符
    for (int i = 0; i < str.size(); i++)
    {
        cout << str.at(i) << " ";
    }
    cout << endl;
    //修改单个字符
    str[0] = 'x';
    str.at(1) = 'x';
    cout << str << endl;
}

int main()
{
    test01();
    system("pause");
    return 0;
}

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

//字符串插入和删除
void test01()
{
    string str = "hello";
    //插入
    str.insert(1, "111");
    cout << str << endl;
    //删除
    str.erase(1, 3);  //从1号位置开始3个字符
    cout << str << endl;
}

int main()
{
    test01();
    system("pause");
    return 0;
}

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

//string求子串
void test01()
{
    string str = "abcdefg";
    string subStr = str.substr(1, 3);
    cout << "subStr = " << subStr << endl;
    //实用操作
    string email = "hello@sina.com";
    int pos = email.find("@");
    string username = email.substr(0, pos);
    cout << "username: " << username << endl;

}

int main()
{
    test01();
    system("pause");
    return 0;
}

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

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

相关文章

力扣hot100题解(python版7-9题)

7、接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,…

音视频剪辑|Windows|抽帧和合帧

什么是抽帧&#xff1f; FFmpeg 抽帧&#xff08;Extracting frames&#xff09;的作用是从视频文件中按需提取单张或多张静止图像&#xff08;帧&#xff09;&#xff0c;并将它们保存为图片文件&#xff08;如 JPEG、PNG 等格式&#xff09;。这一功能在以下场合十分有用&am…

入侵检测系统的设计与实现

入侵检测系统&#xff08;Intrusion Detection System&#xff0c;简称IDS&#xff09;是一种能够监视网络或计算机系统活动的安全工具&#xff0c;旨在识别并响应可能的恶意行为或安全事件。这些事件可能包括未经授权的访问、恶意软件、拒绝服务攻击等。入侵检测系统通过不同的…

【Python笔记-设计模式】装饰器模式

一、说明 装饰器模式是一种结构型设计模式&#xff0c;旨在动态的给一个对象添加额外的职责。 (一) 解决问题 不改变原有对象结构的情况下&#xff0c;动态地给对象添加新的功能或职责&#xff0c;实现透明地对对象进行功能的扩展。 (二) 使用场景 如果用继承来扩展对象行…

python 3.7.3的安装

参考 Linux安装Python3.7-良许Linux教程网 (lxlinux.net) 1、Index of /ftp/python/3.7.9/ 1、安装gcc&#xff0c;yum -y install gcc 2、 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel…

主流开发语言和开发环境:探索编程世界的基础

在当今这个快速发展的技术时代&#xff0c;软件开发已经成为推动创新的重要力量。无论是构建下一代应用、开发先进的算法还是创建复杂的系统&#xff0c;选择合适的编程语言和开发环境都是至关重要的。在本文中&#xff0c;我们将探讨当前流行的几种主流开发语言以及它们常用的…

展锐S8000安卓核心板参数_紫光展锐5G核心板模块定制方案

展锐S8000核心板模块是基于八核S8000平台开发设计的&#xff0c;采用了先进的6nm EUV制程技术。搭载了全新的智能Android 13操作系统&#xff0c;展现出超强的画面解析能力和高性能双通道MIPI&#xff0c;拥有120Hz高刷新率&#xff0c;独立NPU和3.2TOPS Al算力&#xff0c;同时…

python实现维特比算法

对于维特比算法&#xff0c;首先想到的就是高通公司&#xff0c;对于现在的通信行业的两大巨头公司之一&#xff0c;高通公司的发家是由器创始人维特比发明了一种高效的通信解码技术&#xff0c;维特比算法。 对于维特比算法是什么&#xff0c;以一个例子来讲述什么是维特比算…

Xcode中App图标和APP名称的修改

修改图标 选择Assets文件 ——> 点击Applcon 换App图标 修改名称 点击项目名 ——> General ——> Display Name

问题慢慢解决-通过android emulator调试android kernel-内核条件断点遇到的问题和临时解决方案

起因 在摸索到这个方案之后&#xff0c;mac m1调试aarch64 android kernel最终方案&#xff0c;就准备调试内核了&#xff0c;预备下断点的地方是 b binder_poll b ep_ptable_queue_proc b remove_wait_queue但是由于是android系统&#xff0c;上面三个函数会被频繁的触发&am…

新代码质量评审标准与评分表格

前面发了一个《代码质量评审标准与评分表格》&#xff0c;是比较宽泛的&#xff0c;下面发一个更贴近具体场景的《新代码质量评审标准与评分表格》。 一、引言 本文档旨在为代码质量评审提供一个统一的标准和评分机制&#xff0c;以确保代码质量、可读性和可维护性。通过遵循这…

单片机04__基本定时器__毫秒微秒延时

基本定时器__毫秒微秒延时 基本定时器介绍&#xff08;STM32F40x&#xff09; STM32F40X芯片一共包含14个定时器&#xff0c;这14个定时器分为3大类&#xff1a; 通用定时器 10个 TIM9-TIM1和TIM2-TIM5 具有基本定时器功能&#xff0c; 还具有输入捕获&#xff0c;输出比较功…

桥接模式:解耦抽象与实现,实现灵活多变的扩展结构

文章目录 一、引言二、应用场景与技术背景三、模式定义与实现四、实例详解五、优缺点分析总结&#xff1a; 一、引言 ​ 桥接模式是一种结构型设计模式&#xff0c;它将抽象部分与它的实现部分分离&#xff0c;使它们可以独立变化。这种模式通过创建一个抽象层和实现层的结构&…

普中51单片机学习(DS1302)

DS1302时钟 DS1302实时时钟具有能计算2100年之前的秒、分、时、日、日期、星期、月、年的能力&#xff0c;还有闰年调整的能力。内部含有31个字节静态RAM&#xff0c;可提供用户访问。采用串行数据传送方式&#xff0c;使得管脚数量最少&#xff0c;简单SPI 3线接口。工作电压…

初识表及什么是数据表

一、了解表 1.1.概述 表是处理数据和建立关系型数据库及应用程序的基本单元&#xff0c;是构成数据库的基本元素之一&#xff0c;是数据库中数据组织并储存的单元&#xff0c;所有的数据都能以表格的形式组织&#xff0c;目的是可读性强。 1.2.表结构简述 一个表中包括行和列…

下载 axios.js 文件到本地【linux】

方式一 npm install axios在$NODE_PATH/node_modules/axios/dist路径下即可找到axios.js。 方式二 1、百度搜索 GitHub 官网&#xff1a;https://github.com/ 2、搜索 axios 3、点击 axios/axios 4、下载到本地 5、解压&#xff0c;进入到 dist 文件夹** 参考&#x…

实现可拖拽的页面元素排序更新数据库排序

摘要&#xff1a; 拖拽列表改变路边排序&#xff0c;并且更新后台数据库列表的排序&#xff0c;重新请求的时候获取拖拽后的排序&#xff01; Layui&#xff1a; // 拖拽内页顺序list document.querySelector(#view_side_tab);// 创建cruentItem存放将要拖动的元素let cruen…

Zookeeper经典应用场景实战

Zookeeper经典应用场景实战 ZK的不足之处 watcher检测是一次性的&#xff0c;每次触发之后都需要重新注册会话超时之后没有实现重连机制异常处理繁琐仅提供byte数组类型的接口&#xff0c;没提供java实体序列化级接口创建节点时如果抛出异常&#xff0c;需要自行检查节点是否…

【深度学习】Pytorch教程(十):PyTorch数据结构:4、张量操作(1):张量形状操作

文章目录 一、前言二、实验环境三、PyTorch数据结构1、Tensor&#xff08;张量&#xff09;1. 维度&#xff08;Dimensions&#xff09;2. 数据类型&#xff08;Data Types&#xff09;3. GPU加速&#xff08;GPU Acceleration&#xff09; 2、张量的数学运算1. 向量运算2. 矩阵…

【MySQL】多表操作、事务、索引

MySQL MYSQL 多表设计 一对多插入测试数据外键约束(物理外键)使用逻辑外键 MYSQL 多表设计 一对一表结构 MYSQL 多表设计 多对多 MYSQL 多表设计 一对多 建表语句 员工表 CREATE TABLE tb_emp (id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT COMMENT ID,username VARCHAR(20) N…