C++基础知识学习记录—string类

string实际上是C++内置的一个类,内部对char *进行了封装,不用担心数组越界问题,string类中,除了上课讲解的函数外,还有很多函数可以使用,可以自行查阅文档。

构造函数原型:

string(); //创建一个空的字符串 例如: string str;

string(const char* s); //使用字符串s初始化

string(const string& str); //拷贝构造函数

string(int n, char c); //使用n个字符c初始化

string(char *str,int n);//保留前n个字符组成字符串

常用函数

str.size() //取字符串的长度

str.length() //同上取字字符串的长度

str.empty() //判断字符串是否为空

str1==str2 //判断字符串是否相等

字符串的追加

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个字符连接到字符串结尾

取字符

char& operator[](int n); //通过[]方式取字符

char& at(int n); //通过at方法获取字符

插入

string& insert(int pos, const char* s); //插入字符串

string& insert(int pos, const string& str); //插入字符串

删除

string& erase(int pos, int n = npos); //删除从Pos开始的n个字符

string& substr(int pos = 0, int n = npos) const; //返回由pos开始的n个字符组成的字符串。注意接收!!

替换

string& replace(int pos, int n, const string& str); //替换从pos开始n个字符为字符串str

string& replace(int pos, int n,const char* s); //替换从pos开始的n个字符为字符串

#include<iostream>#include<string.h>using namespace std;
int main(){//复习之前讲的string函数string str1 = "admin";char str2[23]="9999";cout << str1.at(0) <<endl;cout << str1[0] << endl;cout << "字符串长度0" << str1.size() << endl;cout << "字符串长度" <<str1.length() <<endl;//字符串的遍历for(char c:str1){cout << c << endl;}cout << "*****" << endl;for(int i=0;i<str1.size();i++){cout << str1[i] << endl;}//string实际上是C++内置的一个类,内部对char *进行了封装,不用担数组越界问//类里面有很多方法string str3 = "welcome"; //隐式调用构造函数cout << str3 << endl;string str4("hello");//显示调用构造函数cout << str4 << endl;// 创建一个堆内存对象string *str5 = new string("world");cout << *str5 << endl;delete str5;string str6(str4);//调用拷贝构造函数cout << str6 << endl;string str7(3,'a');//使用3个字符初始化字符串cout <<str7 <<endl;string str8("ASDFFGGG",3);//保留3个字符组成字符串cout << str8 << endl;cout << str8.empty() << endl; //判断字符串是否为空cout << (str7 == str8)  << endl;//判断字符串是否相等//字符串的追加string str9("qqqq");string str10("mmmmm");str9+=str10;cout << str9 << endl;str9+="hhhhhh";cout << str9 << endl;//字符追加str9+='u';cout << str9 <<endl;char *str11 = "99999";str9 += str11;cout << str9 <<endl;//字符串的拼接string str12("aaaa");str12.append("wwwww");cout << str12 <<endl;//将字符串的前n个字符拼接到目标字符串的结尾//参数1 从哪个字符串 里选取字符进行拼接//参数2  选取前几个字符str12.append("werttyu",3);cout << str12 << endl;//将字符串的s中从某个字符开始的n个字符拼接到目标字符串的结尾//参数1 从那个字符串里选取字符进行拼接//参数2  从哪开始//参数3  拼接几个字符str12.append("mnbvc",1,3);cout << str12 << endl;//插入//参数1  从哪开始插//参数2  插入什么string str13="asdf";str13.insert(2,"nnn");  //在指定位置插入字符串cout << str13 << endl;//asnnndf//删除(截取)//参数1  从哪开始删除(截取)//参数2  删除(截取)几个字符string str14="asdfg";cout << str14.erase(2,3) << endl;//"as"string str15="nhytgbvfr";cout << str15.substr(2,4) << endl;//"ytgb"//替换//参数1  从哪开始替换//参数2  替换几个字符//参数3  替换为什么string str16="mnbvc";cout << str16.replace(0,3,"kkk") << endl; //"kkkvc"return 0;
}

 通过string复习运算符重载

#include <iostream>
#include <cstring>
using namespace std;class String{
private:string str;
public:String(const string &s); //构造函数//友元运算符重载friend String operator +(const String &s1,const String &s2);friend bool operator >(const String &s1,const String &s2);friend bool operator <(const String &s1,const String &s2);friend bool operator ==(const String &s1,const String &s2);//成员函数运算符bool operator !=(const String &other);//赋值运算符String& operator =(const String &s);// 类型转换operator string(); //String转string//成员函数string get_str() const;
};//构造函数
String::String(const string &s)
{str = s;
}//类型转换
String::operator string()
{return str;
}//访问属性str
string String::get_str() const
{return str;
}///字符串赋值
String& String::operator =(const String &s)
{str=s.str;return *this;
}//字符串长度判等
bool String::operator !=(const String &other)
{return str.size() != other.str.size();
}//字符串拼接
String operator +(const String &s1,const String &s2)
{return s1.str+s2.str;
}
//字符串长度 >
bool operator >(const String &s1,const String &s2)
{return s1.str.size()>s2.str.size();
}
//字符串长度 <
bool operator <(const String &s1,const String &s2)
{return s1.str.size()<s2.str.size();
}//字符串长度 ==
bool operator ==(const String &s1,const String &s2)
{return s1.str.size()==s2.str.size();
}
int main()
{String s1("qwe");String s2("qwe");String s3("QWE");String s4("1234");String s5("12");String s6("5678");String s7("34");if(s1>s2)cout<<"正确"<<endl;elsecout<<"错误"<<endl;if(s1>s3)cout<<"正确"<<endl;elsecout<<"错误"<<endl;if(s1>s4)cout<<"正确"<<endl;elsecout<<"错误"<<endl;cout<<(s2+s3).get_str()<<endl;s2=s3;cout<<s2.get_str()<<" "<<s3.get_str();return 0;
}

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

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

相关文章

Ollama+DeepSeek+Open-WebUi

环境准备 Docker Ollama Open-WebUi Ollama 下载地址&#xff1a;Ollama docker安装ollama docker run -d \ -v /data/ollama/data:/root/.ollama \ -p 11434:11434 \ --name ollama ollama/ollama 下载模型 Ollama模型仓库 # 示例&#xff1a;安装deepseek-r1:7b doc…

设计模式--访问者模式【行为型模式】

设计模式的分类 我们都知道有 23 种设计模式&#xff0c;这 23 种设计模式可分为如下三类&#xff1a; 创建型模式&#xff08;5 种&#xff09;&#xff1a;单例模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式。结构型模式&#xff08;7 种&#xff09;&#xff1…

前端循环全解析:JS/ES/TS 循环写法与实战示例

循环是编程中控制流程的核心工具。本文将详细介绍 JavaScript、ES6 及 TypeScript 中各种循环的写法、特性&#xff0c;并通过实际示例帮助你掌握它们的正确使用姿势。 目录 传统三剑客 for 循环 while 循环 do...while 循环 ES6 新特性 forEach for...of for...in 数组…

数据中心储能蓄电池状态监测管理系统 组成架构介绍

安科瑞刘鸿鹏 摘要 随着数据中心对供电可靠性要求的提高&#xff0c;蓄电池储能系统成为关键的后备电源。本文探讨了蓄电池监测系统在数据中心储能系统中的重要性&#xff0c;分析了ABAT系列蓄电池在线监测系统的功能、技术特点及其应用优势。通过蓄电池监测系统的实施&#…

Mac端homebrew安装配置

拷打了一下午o3-mini-high&#xff0c;不如这位博主的超强帖子&#xff0c;10分钟结束战斗 跟随该文章即可&#xff0c;2025/2/19亲测可行 mac 安装HomeBrew(100%成功)_mac安装homebrew-CSDN博客文章浏览阅读10w次&#xff0c;点赞258次&#xff0c;收藏837次。一直觉得自己写…

机器学习实战(8):降维技术——主成分分析(PCA)

第8集&#xff1a;降维技术——主成分分析&#xff08;PCA&#xff09; 在机器学习中&#xff0c;降维&#xff08;Dimensionality Reduction&#xff09; 是一种重要的数据处理技术&#xff0c;用于减少特征维度、去除噪声并提高模型效率。主成分分析&#xff08;Principal C…

windows环境下用docker搭建php开发环境dnmp

安装WSL WSL即Linux子系统&#xff0c;比虚拟机占用资源少&#xff0c;安装的前提是系统必须是win10以上。 WSL的安装比较简单&#xff0c;网上有很多教程&#xff0c;例如&#xff1a;WSL简介与安装流程&#xff08;Windows 下的 Linux 子系统&#xff09;_wsl安装-CSDN博客&…

Python网络爬虫技术详解文档

Python网络爬虫技术详解文档 目录 网络爬虫概述爬虫核心技术解析常用Python爬虫库实战案例演示反爬虫机制与应对策略爬虫法律与道德规范高级爬虫技术资源推荐与学习路径1. 网络爬虫概述 1.1 什么是网络爬虫 网络爬虫(Web Crawler)是一种按特定规则自动抓取互联网信息的程序…

位运算,双指针,二分,排序算法

文章目录 位运算二进制中1的个数题解代码我们需要0题解代码 排序模版排序1题解代码模版排序2题解代码模版排序3题解代码 双指针最长连续不重复子序列题解代码 二分查找题解代码 位运算 1. bitset< 16 >将十进制数转为16位的二进制数 int x 25; cout << bitset<…

一周学会Flask3 Python Web开发-redirect重定向

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 前面我们学过渲染到模板页面&#xff0c;这个其实是一种内部的转发&#xff0c;浏览器地址栏地址没有变化。如果我们想重定向…

图片粘贴上传实现

图片上传 html demo 直接粘贴本地运行查看效果即可&#xff0c;有看不懂的直接喂给 deepseek 会解释的很清晰 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"…

RedisTemplate存储含有特殊字符解决

ERROR信息: 案发时间: 2025-02-18 01:01 案发现场: UserServiceImpl.java 嫌疑人: stringRedisTemplate.opsForValue().set(SystemConstants.LOGIN_CODE_PREFIX phone, code, Duration.ofMinutes(3L)); // 3分钟过期作案动机: stringRedisTemplate继承了Redistemplate 使用的…

Python正则表达式学习

Python正则表达式全攻略 一、正则表达式基础 1. 什么是正则表达式&#xff1f; 用于描述字符串匹配规则的表达式广泛应用于文本处理、表单验证、数据清洗等领域 2. Python中的re模块 import re3. 基础语法 字符说明示例.匹配任意字符(除换行)a.c → abc\d数字 [0-9]\d\d …

20250218 隨筆 垂直分库分表(Vertical Sharding) 和 水平分库分表(Horizontal Sharding)

垂直分库分表&#xff08;Vertical Sharding&#xff09; 和 水平分库分表&#xff08;Horizontal Sharding&#xff09; 是数据库拆分的两种策略。它们在大规模数据库优化、分布式架构设计中至关重要&#xff0c;主要用于 降低单库压力、提高查询效率、支持高并发。 1. 垂直分…

notepad++右键菜单不见了

卸载时没点击完成&#xff0c;又重新安装了一个&#xff0c;最终导致了一些bug&#xff0c;导致右键没有notepad菜单。 解决方式&#xff1a; 新建一个register.reg文件&#xff0c;加入以下代码&#xff0c;然后双击执行即可 代码说明&#xff1a;Open with Notepad 是右…

重定向与文件缓冲机制

目录 一、重定向的原理与实践 1. 输出重定向&#xff1a;让数据流向新目的地 2. 追加重定向&#xff1a;在文件末尾追加数据 3. 输入重定向&#xff1a;从指定文件读取数据 4. 标准输出流与标准错误流的区别 5. 使用 dup2 实现重定向 二、FILE 结构体的奥秘 1. FILE 中的…

DeepSeek 冲击(含本地化部署实践)

DeepSeek无疑是春节档最火爆的话题&#xff0c;上线不足一月&#xff0c;其全球累计下载量已达4000万&#xff0c;反超ChatGPT成为全球增长最快的AI应用&#xff0c;并且完全开源。那么究竟DeepSeek有什么魔力&#xff0c;能够让大家趋之若鹜&#xff0c;他又将怎样改变世界AI格…

显微镜下的人体结构

显微镜下的人体结构&#xff0c;看完以后&#xff0c;你还觉得人类是进化而来的吗&#xff1f;...... 第一张&#xff1a;电子显微镜所观察到的人类血管&#xff0c;可以非常清楚的看到里面的白细胞和红细胞 第二张&#xff1a;正在分泌耳垢&#xff08;耳屎&#xff09;的耳道…

DApp 开发入门指南

DApp 开发入门指南 &#x1f528; 1. DApp 基础概念 1.1 什么是 DApp&#xff1f; 去中心化应用&#xff08;DApp&#xff09;是基于区块链的应用程序&#xff0c;特点是&#xff1a; 后端运行在区块链网络前端可以是任何框架使用智能合约处理业务逻辑数据存储在区块链上 1…

鸿蒙状态管理概述 v2

状态管理v2 概述状态管理之v2ObservedV2 和 Trace状态管理V1版本对嵌套类对象属性变化直接观测的局限性ObservedV2 和 Trace 使用场景 Local状态管理V1版本State装饰器的局限性 Param状态管理V1版本接受外部传入的装饰器的局限性 OnceEventComputedComputed 使用场景 TypePersi…