【C++】string常用函数总结及其模拟实现

news2024/11/17 17:25:00

目录

一、String的构造

二、String的大小和容量

三、String的字符串比较

四、string的访问

五、String的字符插入

六、string拼接字符串

七、string的删除

八、string的查找

九、string的分割

模拟实现


一、String的构造

  1. string():生成空字符串;
  2. string (const string& str):生成str字符串的一个拷贝;  
  3. string (const string& str, size_t pos, size_t len = npos):生成str字符串pos位置字符开始,npos个字符的拷贝(如果数量不足,则到结尾为止);
  4. string (const char* s):生成字符数组s的一个拷贝;
  5. string (const char* s, size_t n):生成字符数组s前n个元素的一个拷贝;
  6. string (size_t n, char c):生成有n个字符c的一个字符串;
  7. template <class InputIterator>  string  (InputIterator first, InputIterator last):利用迭代器生成字符串;

二、String的大小和容量

  1. size():返回string对象的字符个数;
  2. capacity():重新分配内存之前,string对象能包含的最大字符数;
  3. reserve(size_t n = 0):修改string的容量为n,若n大于现有容量,则不进行改变;
  4. resize(size_t n, char c):修改string的字符个数,若n小于现有字符个数,对其进行截断,若n大于现有字符串个数,使用字符c进行填充;

三、String的字符串比较

 C ++字符串支持常见的比较操作符(>,>=,<,<=,==,!=),甚至支持string与C-string的比较(如 str<”hello”)。  
在使用>,>=,<,<=这些操作符的时候是根据“当前字符特性”将字符按字典顺序进行逐一得比较。字典排序靠前的字符小,比较的顺序是从前向后比较,遇到不相等的字符就按这个位置上的两个字符的比较结果确定两个字符串的大小(前面减后面)。

四、string的访问

  1. 使用[ ]:string支持使用[ ]进行类似于数组的随机访问;
  2. 使用at(size_t pos):类似与[ ],区别为at函数会进行越界检查;
  3. 迭代器与反向迭代器

五、String的字符插入

  1. push_back(char c):尾插;
  2. insert(iterator pos, char c):在pos位置前插入字符c;
void test()
{
    string s1;

    // 尾插一个字符
    s1.push_back('a');
    s1.push_back('b');
    s1.push_back('c');
    cout<<"s1:"<<s1<<endl; // s1:abc

    // 在pos前插入字符c
    s1.insert(s1.begin(),'1');
    cout<<"s1:"<<s1<<endl; // s1:1abc
}

六、string拼接字符串

  1. append()
  2. +=操作符
void test()
{
    // 方法一
    string s1("abc");
    s1.append("def");
    cout<<"s1:"<<s1<<endl; // s1:abcdef

    // 方法二
    string s2 = "abc";
    s2 += "def";
    cout<<"s2:"<<s2<<endl; // s2:abcdef
}

七、string的删除

  1. iterator erase(iterator p):删除字符串中p所指的字符
  2. iterator erase(iterator first, iterator last):删除字符串中迭代器区间[first,last)上所有字符
  3. string& erase(size_t pos = 0, size_t len = npos):删除字符串中从索引位置pos开始的len个字符
  4. void clear():/删除字符串中所有字符

八、string的查找

  1. size_t find (constchar* s, size_t pos = 0) const:在当前字符串的pos索引位置开始,查找子串s,返回找到的位置索引,-1表示查找不到子串;
  2. size_t find (charc, size_t pos = 0) const:在当前字符串的pos索引位置开始,查找字符c,返回找到的位置索引,-1表示查找不到字符;
  3. size_t rfind (constchar* s, size_t pos = npos) const:在当前字符串的pos索引位置开始,反向查找子串s,返回找到的位置索引,-1表示查找不到子串;
  4. size_t rfind (charc, size_t pos = npos) const:在当前字符串的pos索引位置开始,反向查找字符c,返回找到的位置索引,-1表示查找不到字符;
  5. size_t find_first_of (const char* s, size_t pos = 0) const:在当前字符串的pos索引位置开始,查找子串s的字符,返回找到的位置索引,-1表示查找不到字符;
  6. size_t find_first_not_of (const char* s, size_t pos = 0) const:在当前字符串的pos索引位置开始,查找第一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到字符;
  7. size_t find_last_of(const char* s, size_t pos = npos) const:在当前字符串的pos索引位置开始,查找最后一个位于子串s的字符,返回找到的位置索引,-1表示查找不到字符;
  8. size_t find_last_not_of (const char* s, size_t pos = npos) const:在当前字符串的pos索引位置开始,查找最后一个不位于子串s的字符,返回找到的位置索引,-1表示查找不到子串;

九、string的分割

  1. strtok()
void test()
{
    char str[] = "I am a student; hello world!";

    const char *split = ",; !";
    char *p2 = strtok(str,split);
    while( p2 != NULL )
    {
        cout<<p2<<endl;
        p2 = strtok(NULL,split);
    }
}


模拟实现

参考下面的链接

my_string class · 梁羽赫/cpp_basic - 码云 - 开源中国 (gitee.com)icon-default.png?t=N7T8https://gitee.com/yuhe-liang/cpp_basic/tree/master/my_string%20class

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

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

相关文章

Llama3 中文通用 Agent 微调模型来啦!(附手把手微调实战教程)

节前&#xff0c;我们组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 基于大家…

文本语音互相转换系统设计

title: 文本语音互相转换系统设计 date: 2024/4/24 21:26:15 updated: 2024/4/24 21:26:15 tags: 需求分析模块化设计性能优化系统安全智能化跨平台区块链 第一部分&#xff1a;导论 第一章&#xff1a;背景与意义 文本语音互相转换系统的定义与作用 文本语音互相转换系统是…

js进行数据移除性能比较(splice,map)

当使用 splice() 方法处理大量数据时&#xff0c;确实会遇到性能问题&#xff0c;因为它涉及到移动数组中的元素&#xff0c;导致操作的时间复杂度为 O(n)。对于大量数据&#xff0c;频繁的插入和删除可能会导致性能下降。 1、设置数组数据为10000&#xff0c;使用splice移除数…

linux——yum工具详解

yum是linux中自动解决软件包依赖关系的管理器 同时&#xff0c;yum也是一个rpm软件 这里使用yum install nginx安装nginx

前缀和 求数列的子序列的K倍区间

(直接截图比复制文字要好多了) 不会做的时候我去看了之前做的关于这道题目的笔记&#xff0c; &#xff08;Ak 1&#xff09;% k 1 &#xff08;Ak 1 Ak&#xff09;% k 1 只要发现了同余数的情况就说明有一个区间满足了题目的要求。 这个方法的精妙之处就在于前缀和包括了…

窗函数的选择

不同的窗函数实质上时对矩形窗进行了不同程度的加权得到的不同类型的窗函数。 将模拟角频率转换为了数字角频率 矩形窗旁瓣过大&#xff0c;两个频率的峰值相差较大&#xff0c;因此无法识别&#xff0c;可以使用旁瓣非常小的窗函数来进行分辨&#xff0c;只是想要达到相同的分…

目标检测——小麦穗头数据集

一、重要性及意义 小麦穗头检测在农业领域具有重要意义&#xff0c;主要体现在以下几个方面&#xff1a; 首先&#xff0c;小麦穗头检测可以帮助农民和植物科学家准确评估作物的健康状况和成熟度。通过对小麦穗部的形态特征进行测量和分析&#xff0c;可以及时发现作物生长过…

简单工厂、工厂方法、抽象工厂对比

简单工厂、工厂方法和抽象工厂是三种常见的工厂设计模式&#xff0c;它们在软件设计中各有其独特的应用场景和优缺点。因为三种设计模式都属于工厂模式&#xff0c;在实际应用中可能存在误用的场景&#xff0c;这里对其做下对比&#xff0c;以便更好的理解这三种设计模式。 简…

第四百七十七回

文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性 3. 示例代码4. 内容总结 我们在上一章回中介绍了"Get包简介"相关的内容&#xff0c;本章回中将介绍GetMaterialApp组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经…

【HTML】页面引用Vue3和Element-Plus

在现代前端开发中&#xff0c;Vue 3 和 Element Plus 是非常受欢迎的技术。Vue 3 是一个用于构建用户界面的渐进式 JavaScript 框架&#xff0c;而 Element Plus 是一个基于 Vue 3 的组件库&#xff0c;提供了丰富的 UI 组件&#xff0c;帮助开发者快速构建高质量的前端应用。 …

【Java | 多线程】LockSupport 的使用和注意事项

了解一下 LockSupport LockSupport是一个类&#xff0c;位于java.util.concurrent.locks包中&#xff0c;提供了基本的线程同步机制。 LockSupport的主要作用是挂起和唤醒线程。它提供了两个主要的静态方法&#xff1a;park()和unpark()。 park()&#xff1a;用于挂起当前线…

成都百洲文化传媒有限公司电商服务怎么样?

在当今数字化浪潮席卷全球的背景下&#xff0c;电商行业异军突起&#xff0c;成为连接消费者与品牌之间的重要桥梁。在这股变革之风中&#xff0c;成都百洲文化传媒有限公司以其专业的电商服务&#xff0c;成为行业的佼佼者&#xff0c;助力众多品牌踏上腾飞之路。 一、专业铸…

【Java 解析全国详细地址】Java 利用正则表达式完美解析全国省市区地址

这里写自定义目录标题 Java使用正则解析省市区/县 具体地址问题场景上demo运行结果 Java使用正则解析省市区/县 具体地址 问题场景 OCR识别营业执照 获取详细地址并拆分 上demo import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import j…

前端开发攻略---封装calendar日历组件,实现日期多选。可根据您的需求任意调整,可玩性强。

1、演示 2、简介 1、该日历组件是纯手搓出来的&#xff0c;没依赖任何组件库&#xff0c;因此您可以随意又轻松的改变代码&#xff0c;以实现您的需求。 2、代码清爽干净&#xff0c;逻辑精妙&#xff0c;您可以好好品尝。 3、好戏开场。 3、代码&#xff08;Vue3写法&#xff…

ROS下机器人系统仿真及部分SLAM建图

文章目录 一、 Launch文件使用二、 参考资料三、 遇到的问题四、 效果演示五、相关代码5.1 一些简介5.2 机器人模型5.2.1 机器人底盘5.2.2 摄像头5.2.3 雷达 5.3 惯性矩阵 六、代码传送门实验结果及分析 温馨提示&#xff1a;如果有幸看到这个文章&#xff0c;不要看里面的内容…

bugku-杂项-社工进阶收集

下载附件 得到图片 利用百度地图查找 这里得到地点名称大雁塔音乐喷泉 陕西省西安市&#xff0c;大雁塔北广场 打开高德地图 来到大雁塔北广场 因为在北广场&#xff0c;所以地铁站为大雁塔站 开始分析 坐七站到大雁塔站&#xff0c;即始发站为韦曲南站 因为始发站离她家800米&…

Vue3的监听属性watch和计算属性computed

监听属性watch 计算属性computed 一、监听属性watch watch 的第一个参数可以是不同形式的“数据源&#xff0c;watch 可以监听以下几种数据&#xff1a; 一个 ref (包括计算属性)、 一个响应式对象、 一个 getter 函数、 或多个数据源组成的数组 watch 的参数:监视的回调&…

如何用stata画出文献中常见的安慰剂检验图?如何解决

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

Twisted 与 Tornado 中的 WebSocket 连接问题及解决方案

1、问题背景 项目中我们需要通过 Tornado HTTP 处理程序建立WebSocket连接&#xff0c;该连接需要处理多个用户请求&#xff0c;并且将从外部服务器获取的数据存储到数据库中。我们尝试了以下实现&#xff1a; from twisted.internet import reactor from autobahn.websocket…

R可视化:ggplot2绘制双y轴图

介绍 ggplot2绘制双y轴图加载R包 knitr::opts_chunk$set(message = FALSE, warning = FALSE) library(tidyverse) library(readxl)# rm(list = ls()) options(stringsAsFactors = F) options(future.globals.maxSize = 10000 * 1024^2)Importing data 下载Underdetection of c…