黑马c++ STL部分 笔记(2) string容器

char*是指针

string是类,类内部封装了char*,管理这个字符串,是一个char*型的容器

函数:find,copy,delete,replace,insert等

1.构造string

// string的构造方式:
// 1 string() 创建一个空字符串 =string str
// 2 string(const char* s) 用s初始化
// 3 string(const string& str) 拷贝构造
// 4 string(int n,char c) n个字符c初始化
#include <bits/stdc++.h>
using namespace std;
void test01()
{string s1; // 1 默认构造const char *str = "hello world";string s2(str);cout << "s2= " << s2 << endl; // 2 用s初始化 这里没有const是因为str已经是常量了string s3(s2);cout << "s3= " << s3 << endl; // 3 拷贝构造 不用const原因同2string s4(10, 'a');cout << "s4= " << s4 << endl; // 4 n个字符c初始化
}
int main()
{test01();
}

2.string的赋值 

// string的赋值操作
// 1 string& operator=(const char* s);//char*类型字符串,赋值给当前字符串
// 2 string& operator=(const string &s);//把字符串s赋给当前字符串
// 3 string& operator=(char c);//字符赋给当前字符串
// 4 string& assign(const char* s);//同1
// 5 string& assign(const char* s,int n);把字符串s前n个字符赋给当前字符串
// 6 string& assign(const string &s);//同2
// 7 string& assign(int n,char c);//n个字符c赋给字符串
#include <bits/stdc++.h>
using namespace std;
void test01()
{string str1;str1 = "hello world"; // 1// cout<<str1;//hello worldstring str2 = str1; // 2// cout<<str2;//hello worldstring str3;str3 = 'a'; // 3// cout<<str3;//astring str4;str4.assign("hello c++"); // 4// cout<<str4;//hello c++string str5;str5.assign("hello c++", 5); // 5// cout<<str5;//hellostring str6;str6.assign(str5); // 6// cout<<str6;//hellostring str7;str7.assign(10, 'b'); // 7cout << str7;         // bbbbbbbbbb
}
int main()
{test01();
}

 3.string的拼接

// string字符串拼接:实现在字符串末尾拼接字符串
// 1 string& operator+=(const char* str)重载+=操作符
// 2 string& operator+=(const char c)重载+=操作符
// 3 string& operator+=(const string& str)重载+=操作符
// 4 string& append(const char* s)把字符串s连接到当前字符串结尾
// 5 string& append(const char* s,int n)把字符串s的前n个字符连接到当前字符串的结尾
// 6 string& append(const string &s)同3operator+=(const string& str)
// 7 string& append(const string &s,int pos,int n)把字符串s中从pos开始的n个字符连接到字符串结尾#include <bits/stdc++.h>
using namespace std;
void test01()
{string str1 = "我";str1 += "爱玩游戏"; // 1// cout<<str1;//我爱玩游戏str1 += ':'; // 2// cout<<str1;//2我爱玩游戏:string str2 = " LOL DNF";str1 += str2; // 3// cout<<str1;//我爱玩游戏: LOL DNFstring str3 = "I";str3.append(" love "); // 4// cout << str3;// I lovestr3.append("game abcde", 4); // 5// cout << str3;// I love gamestr3.append(str2);//6// cout<<str3;//I love game LOL DNFstring str4="I love game";str4.append(str2, 0, 4); // 7//cout << str4;// I love game LOLstring str5="I love game";str5.append(str2, 4, 3); // 7cout << str5;// I love game DNF
}
int main()
{test01();
}

4.string的查找与替换  

// string的查找和替换
// 1 int find(const string& str, int pos = 0) const; //查找str第一次出现位置,从pos开始查找
// 2 int find(const char* s, int pos = 0) const;     //查找s第一次出现位置,从pos开始查找
// 3 int find(const char* s, int pos, int n) const;  //从pos位置查找s的前n个字符第一次位置
// 4 int find(const char c, int pos = 0) const;      //查找字符c第一次出现位置
// 5 int rfind(const string& str,int pos = npos) const;//查找str最后一次位置,从pos开始查找
// 6 int rfind(const char* s, int pos = npos) const; //查找s最后一次出现位置,从pos开始查找
// 7 int rfind(const char* s, int pos, int n) const; //从pos查找s的前n个字符最后一次位置
// 8 int rfind(const char c, int pos = 0) const;     //查找字符c最后一次出现位置
// 9 string& replace(int pos, int n, const string& str);//替换从pos开始n个字符为字符串str
// 10 string& replace(int pos, int n,const char* s);  //替换从pos开始的n个字符为字符串/*find查找是从左往后找第一个,rfind从右往左找第一个
find找到字符串后返回查找的第一个字符位置,找不到返回-1
replace在替换时,要指定从哪个位置起,多少个字符,替换成什么样的字符串
*/
#include <bits/stdc++.h>
using namespace std;
// 查找
void test01()
{string str1 = "abcdefgde";cout << "1:  " << str1.find("de") << endl;  // 查"def"在str1的哪个位置 //3cout << "1:  " << str1.find("df") << endl;  // 查"df"在str1的哪个位置 //很大的数字 or -1cout << "5:  " << str1.rfind("de") << endl; // 7
}
// 替换
void test02()
{string str1 = "abcdefg";string str2 = str1.replace(1, 3, "1111");cout << "9:  " << str2; // a1111efg 不是a1111defg,因为d被覆盖
}
int main()
{test01();test02();
}

 5.string字符串比较 

// string字符串比较 一般比较string相等
// 1 int compare(const string &s) const;       //与字符串s比较
// 2 int compare(const char *s) const;        //与字符串s比较
/*string字符串比较(从左往右依次比较ASCLL码)
= 返回 0
> 返回 1
< 返回 -1*/
#include <bits/stdc++.h>
using namespace std;
// 比较
void test01()
{string str1 = "hello";string str2 = "hello";if (str1.compare(str2) == 0){cout << "=" << endl; //=}str2 = "zello";if (str1.compare(str2) < 0){cout << "<" << endl; //<}str2 = "aello";if (str1.compare(str2) > 0){cout << ">" << endl; //>}
}int main()
{test01();
}

6.string的存取  

// string字符存取
// 1 char& operator[](int n);//通过[]方式取字符
// 2 char& at(int n);//通过at方式取字符
#include <bits/stdc++.h>
using namespace std;
// 比较
void test01()
{// 访问字符string str1 = "hello";for (int i = 0; i < str1.size(); i++) // size返回字符串长度{cout << str1[i] << " "; // h e l l o}cout << endl;for (int i = 0; i < str1.size(); i++) // size返回字符串长度{cout << str1.at(i) << " "; // h e l l o}cout << endl;// 修改字符str1[0] = 'x';cout << str1 << endl; // xellostr1.at(0) = 'y';cout << str1 << endl; // yello
}int main()
{test01();
}

7.string的插入和删除  

// string的插入和删除
// 1 string& insert(int pos,const char* s);//在pos位置插入字符串
// 2 string& insert(int pos,const string& s);//在pos位置插入字符串
// 3 string& insert(int pos,int n,char c);//在pos位置插入n个字符c
// 4 string& erase(int pos,int n=npos);//删除从pos开始的n个字符
#include <bits/stdc++.h>
using namespace std;void test01()
{ // 插入string str = "hello";str.insert(1, "111");cout << str << endl; // h111ellostr.erase(1, 3);cout << str << endl; // hello
}int main()
{test01();
}

 8.string求字串

// string求字串
// string substr(int pos=0,int n=npos) const;返回由pos开始的n个字符串组成的字符串
#include <bits/stdc++.h>
using namespace std;void test01()
{string str = "abcdef";string subStr = str.substr(1, 3);cout << subStr << endl; // bcd
}
// 使用操作
void test02()
{string email = "zhangsan@sina.com";// 从邮箱中获取用户名信息int length = email.find("@");string username = email.substr(0, length); // length=8cout << username << endl;                  // zhangsan
}
int main()
{test01();test02();
}

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

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

相关文章

LeetCode 刷题 [C++] 第102题.二叉树的层序遍历

题目描述 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 题目分析 题目中要求层序遍历二叉树&#xff0c;即二叉树的广度优先搜索(BFS)。BFS一般使用队列的先入先出特性实现&#…

react倒计时功能

目录 类组件写法 函数组件写法&#xff1a; demo: 手机获取验证码登录&#xff08;验证码60秒倒计时&#xff09; react倒计时5 秒 React中的倒计时可以通过使用setInterval()函数来实现。下面是一个示例代码&#xff1a; 类组件写法 import React from react; import { But…

【Docker】狂神说

图片后补 官网&#xff1a; https://www.docker.com/ Docker概述 Docker为什么出现 原因&#xff1a;环境配置不能跨平台 方案 传统方式&#xff1a;jar&#xff08;开发人员&#xff09; 部署&#xff08;运维人员&#xff09; 解决方式&#xff1a;开发打包上线一套流程 …

推荐几个css+js特效网站

CodePen&#xff08;https://codepen.io/&#xff09;&#xff1a;CodePen不仅仅是一个CSS编辑器&#xff0c;它也是一个广受欢迎的JavaScript特效展示平台。你可以在CodePen上浏览和搜索其他开发者创建的各种JavaScript特效&#xff0c;从而获得灵感和学习如何实现不同的效果。…

【算法集训】基础算法:基础排序 - 选择排序

从上一学期期末考完之后就鸽了&#xff0c;真的惭愧&#xff0c;还想着期末考完就开始呢&#xff0c;结果考驾照完了后又有学校项目要忙活。终于是拖到开学了哈哈&#xff0c;虽然现在事情也比较多&#xff0c;但是总归是要开始的&#xff0c;不然马上就要拖延症晚期了&#xf…

设计模式:结构型模式

1. 适配器模式 (Adapter Pattern) 适配器模式是一种结构型设计模式&#xff0c;旨在将一个类的接口转换成客户端所期待的另一个接口&#xff0c;从而使原本由于接口不兼容而无法一起工作的类能够协同工作。适配器模式通常用于需要复用现有类但其接口与要求不匹配的情况。 1.1…

Qt SQLite的创建和使用

重点&#xff1a; 1.SQLite创建数据库内容方法 链接&#xff1a;SQLite Expert Personal的简单使用-CSDN博客 2.和数据库进行链接方法 QSqlDatabase DB; //数据库连接bool MainWindow::openDatabase(QString aFile) {DBQSqlDatabase::addDatabase("QSQLITE"); /…

使用uniapp开发时自定义tabbar

预览图&#xff1a; 一、配置page.jsong中的tabbar&#xff08;这一步是必须的&#xff0c;因为我们在使用uni.switchTab()时必须要用到&#xff09; "tabBar": {"list": [{"pagePath": "pages/index/index","iconPath": &…

java回顾总结--代理模式

目录 一、代理模式1.1 静态代理示例 1.2 动态代理示例 二、总结 一、代理模式 1.1 静态代理 代理模式给某一个对象提供一个代理对象&#xff0c;并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。比如你按照小卡片上的电话打过去寻求服务&#…

C# 学习第四弹——字符串

一、char类型的使用 字符使用单引号&#xff0c;单个字符 转义字符是一种特殊的字符变量&#xff0c;以反斜线开头&#xff0c;后跟一个或多个字符。 输出多级目录可以使用 二、字符串的声明和初始化 1、引用字符串常量 引用字符串常量初始化——字符使用单引号&#xff0…

加密与安全_探索常用编码算法

文章目录 概述什么是编码编码分类ASCII码 &#xff08;最多只能有128个字符&#xff09;Unicode &#xff08;用于表示世界上几乎所有的文字和符号&#xff09;URL编码 &#xff08;解决服务器只能识别ASCII字符的问题&#xff09;实现&#xff1a;编码_URLEncoder实现&#xf…

K8S常用kubectl命令汇总(持续更新中)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

【Prometheus】基于Altertmanager发送告警到多个接收方、监控各种服务、pushgateway

基于Altertmanager发送报警到多个接收方 一、配置alertmanager-发送告警到qq邮箱1.1、告警流程1.2、告警设置【1】邮箱配置【2】告警规则配置【3】 部署prometheus【4】部署service 二、配置alertmanager-发送告警到钉钉三、配置alertmanager-发送告警到企业微信3.1、注册企业微…

量子算法入门—4.量子比特与量子门(1)

1.量子比特 经典比特和量子比特 经典比特只有0、1两种取值&#xff0c;非黑即白&#xff0c;有n位即 2 n 2^n 2n种可能量子比特使用0、1的量子态描述量子比特的状态&#xff0c;可以通过线性组合形成新的量子态&#xff0c;就像光谱可以调节成分 引入线代记法&#xff0c;0、…

ARK:《BIG IDEAS 2024》

Cathie Wood所带领的方舟投资&#xff08;ARK&#xff09;发布了年度重磅研究报告《BIG IDEAS 2024》&#xff0c;该报告指出人工智能、公共区块链、多组学测序、能源存储和机器人技术这五大板块的融合将带来全球经济活动的改变。 这五个创新平台正在融合并定义这个技术时代&am…

92. 递归实现指数型枚举 刷题笔记

思路 dfs 考虑选或者不选每个位置 用0表示未考虑 1表示选 2表示不选 用u表示搜索状态 u>n时 已经搜到底层了 需要输出当前方案 遍历 如果选了则输出 #include<iostream> using namespace std; int n; const int N16; int st[N]; void dfs(int u){ //u来记…

Git自动忽略dll文件的问题

检查了半天发现是sourcetreee的全局忽略文件导致&#xff0c; 从里面删除dll即可。 我是干脆直接删了全局忽略&#xff0c;太恶心了&#xff0c;如下&#xff1a; #ignore thumbnails created by windows Thumbs.db #Ignore files build by Visual Studio *.exe .vsconfig .s…

fastAdmin表格列表的功能

更多文章&#xff0c;请关注&#xff1a;fastAdmin后台功能详解 | 夜空中最亮的星 FastAdmin是一款基于ThinkPHP5Bootstrap的极速后台开发框架。优点见开发文档 介绍 - FastAdmin框架文档 - FastAdmin开发文档 在这里上传几张优秀的快速入门图: 一张图解析FastAdmin中的表格列…

Linux网络编程(四-TCP协议)

目录 一、TCP概念 二、TCP的首部格式 三、TCP可靠传输机制 3.1 确认应答机制 3.2 超时重传机制 3.3 连接管理 3.3.1 三次握手 3.3.2 四次挥手 3.4 流量控制 3.5 拥塞控制 四、TCP效率机制 4.1 滑动窗口 4.2 重发控制 4.3 延迟应答 4.4 捎带应答 五、TCP的…

大数据分布式计算工具Spark实战讲解(数据输入实战)

Python数据容器转RDD对象 PySpark支持通过SparkContext对象的parallelize成员方法&#xff0c;将&#xff1a; - list - tuple - set - dict - str 转换为PySpark的RDD对象 注意&#xff1a; •字符串会被拆分出1个个的字符&#xff0c;存入RDD对象 •字典仅有key会被存入…