首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

string模拟实现

上一篇博客我们对string函数进行了讲解,今天我们就对string进行模拟实现,以便于大家更加深入地了解string函数应用 由于C++库里面本身就有一个string,所以我们为了不让编译器混淆视听...,我们可以首先将我们自己模拟实现string放入一个我们自己定义命名空间内,这里我将命名空间命名为jh(本人名字首字母缩写): namespace jh { class string {...}; } 然后就是我们将string成员进行定义: string实际就是字符串,它几个成员有capacity(容量),size(字符拆串当前字符个数),str(字符串指针) namespace...大部分经常使用成员函数进行模拟实现: 构造函数 首先定义一个构造函数,用于创建string,这里大家用到了strlen和strcpy函数,所以要带上头文件string.h 还有一个需要注意点...ch不等于空格并且不等于换行符时才能放入开辟好buff空间里,当i等于128时,我们将i位置置为\0,将buff空间存储字符串用+=放入string对象s,同时i置为0,再进行一次get提取,判断输入

7910

stl中String实现

:串=串+c串 friend String operator+(const char* c,const String& s);//串连接:串=c串+串 //串比较 bool operator...,就加上这行代码,默认其为安全,注意:必须要置顶 #include"string.h" #include //1.默认构造函数实现--同时也是转换构造函数 //注意:如果声明时候写了默认实参...,那么实现时候就不能再次写一遍,不然会报错 String::String(const char* c) { size = strlen(c);//strlen不包含\0长度,sizeof包含\0...,而不能出现在友元函数实现String operator+(const char* c, const String& s) { String w; int len = strlen(c) +...0; } 这里函数只是列举了常见一部分,实际stl中string函数代码实现比这多多 这里模式匹配用是最简单朴素模式匹配算法,高级一点可以用KMP算法,还可以把KMP算法next数组优化为

49210

CC++:string模拟实现

string文档网站 string介绍以及一些常见问题 String是一个管理字符数组,要求这个字符数组结尾用 ‘\0’ 标识 涉及问题如下: 拷贝构造和赋值重载实现 深拷贝...模拟实现 (定义在string.h中) 整体框架(简单直接在框架实现了) #include #include //运用C++风格头文件 #include...(string& s); //自己写swap去调用全局swap完成成员变量交换 // // iterator 与 const_iterator 迭代器...; //有效字符个数 static const size_t npos; //外定义 }; / // 表示关系运算符重载(作为非成员函数重载..._str); //这里调用是构造函数,而不是拷贝构造,如果调用拷贝构造,会死循环 this->swap(tmp); //具体看下面swap实现,其实就是将成员函数交换了

32920

【C++】string模拟实现

所以构造出来tmp和s就拥有一样大小空间和数据,然后我们再调用stringswap成员函数,进行被拷贝对象this和tmp对象交换,这样只需两行代码就能解决拷贝构造实现,但真的解决了吗?...string修改模块儿中yyds函数,我们也只实现两个最常用版本,参数分别为字符和字符串版本。 在已实现push_back和append情况下,我们直接进行函数复用即可。...,其作用就是返回string对象成员变量,也就是char *指针。...这里实现getline时候,有一点小问题,对于istream对象在传参时,不能使用传值拷贝,编译器会自动删除掉istream拷贝构造,防止出现浅拷贝等不确定问题,如果想要进行解决,则需要用引用...在实现内部,我们利用+=来进行string对象字符尾插。

60020

C++初阶:适合新手手撕string(模拟实现string

先看一下大概有哪些部分: 1.基本结构与文件规划 string.h头文件:包含全部(函数声明与定义) test.cpp源文件:进行调用test函数,测试和完善功能 基本结构: namespace...MyString { class string { public: //各种函数 private: int _size;//有效字符数量 int _capacity;//开空间大小..._str); } 2.3模拟c_str()函数 目前还没有进行流插入和流提取重构,只能利用这个来输出string内容 const char* c_str()const { return _str...; } 利用test1函数来看是否正确: 相同命名空间会进行合并 namespace MyString { void test1() { string s1; cout << s1.c_str...} return s; } 13.operator> ostream& operator<<(ostream& out, string& s)//不需要放在内,不需要是友元

12510

【C++】string模拟实现

文章目录 一、string构造、拷贝构造、赋值重载以及析构 1.构造函数 2.拷贝构造 3.swap问题 4.赋值重载 5.析构函数 二、常用接口 1.c_str 2.[] 3.迭代器和范围for...构造、拷贝构造、赋值重载以及析构 1.构造函数 分为无参和带参这两种构造函数。...中swap要指定作用域std::,否则需要从局部找,再去全局找,发现参数不匹配 4.赋值重载 默认生成赋值重载也会导致浅拷贝,所以我们需要实现深拷贝。...静态成员变量,静态成员变量要在外定义: size_t string::npos = -1 普通成员对象可以给缺省值,在构造函数初始化列表完成初始化,但是静态成员变量不会在初始化列表阶段进行初始化...,静态成员变量不属于某个具体对象,属于整个,所以需要在外初始化。

70530

库中是如何实现string?

个人主页: :✨✨✨初阶牛✨✨✨ 推荐专栏1: C语言初阶 推荐专栏2: C语言进阶 个人信条: 知行合一 本篇简介:>:讲解如何模拟实现C++中string....✨ 前言 我们先认识一下string框架. class string { public: //成员函数 private: char* _str;...申请一块为_capacity+1大小空间.(+1是为了存储'\0') 将字符串中值按字节拷贝至string_str....目标字串 字符串匹配算法,这里简化,直接调用库函数strstr,就不手撕算法了. // 返回子串s在string中第一次出现位置 size_t find(const char* s, size_t...(*this == s); } 博主能力有限,无法严格按照库中方法实现,比如采用内存池等技术,还有部分函数并未实现,模拟实现string目的只是为了我们更好理解string,而不是真正让我们去写一个库函数

14310

【C++】string模拟实现

前言 在之前两篇博客中已经分享关于string使用,有需要可以点击链接看看【C++】string初步介绍和链接: 【C++】string进一步介绍,这次要分享用C++代码来实现string。...将无参和带参合二为一,实现一个缺省构造: string(const char* str=nullptr) :_size(strlen(str)) { _capacity = _size...实现一下简单交换,直接将将两个字符串内容交换就行,使用库函数里面的swap来实现: void swap(string& s) { std::swap(_str, s....这里io流在istream里面: 在istream有: 所以这里得用get来取字符: 流提取是一个覆盖,在提取之前先清空,就用clear,再用get来获取字符: istream...附string实现代码 #pragma once #include namespace bit { class string { public: typedef char

7310

【c++】string模拟实现

1.基本框架 我们stl库中string实在std命名空间,这里我们自定义一个命名空间own,包含string和简单成员变量: namespace own { class string {...有多种构造函数,我们来实现常见几种: string() 空字符串构建: string() :_str(new char[1]) ,_size(0) ,_capacity(0) { _str...[0]='\0'; } 这里我们给字符数组分配一个空间大小来存储\0,同时设置 _size 和 _capacity 成员变量初始值 string(const char*str) 这个我们用一个常量字符串来实例化一个对象...,系统默认拷贝构造是逐个字节浅拷贝,会导致两个字符串指向同一个空间,在析构时可能会对同一个空间多次释放使系统崩溃 所以,我们需要手动实现深拷贝 string(const string& s) {...对象和const string对象都可以调用这几个函数 operator[ ] 这个函数功能就是返回[]位置字符,实现如下: char& operator[](size_t pos) {

3510

String

String字符串: String字符串是由一个char数组构成,由于这个数组是由final修饰,所以String也叫做不可变字符串。...字符串池就是里面养了一堆字符串,所有这种方式申请方式:String s=”123”; 都是指向字符串池里字符串。 为什么会有个字符串优化池呢?...String有许多构造器,这些构造器可以把byte数组、char数组等等转换成字符串: ? 代码示例: ? 运行结果 ? charAt方法: 按字符串下标拿出那个下标的字符方法。例如: ?...既然有不可变字符串,那么就有可变字符串,那就是StringBuffer,由于StringBuffer是可变字符串,所以适合追加,修改之类操作,速度比起String是相当快。...从以下两个部分代码对比就可以到StringBuffer方法都带有synchronized关键字: StringBuilder部分代码: ? StringBuffer部分代码: ?

21820

【Java】String

String(String original): 初始化一个新创建 String 对象,使其表示一个与参数相同字符序列;换句话说,新创建字符串是该参数字符串副本。...String与其他结构间转换 字符串 --> 基本数据类型、包装: Integer包装public static int parseInt(String s):可以将由“数字”字符组成字符串转换为整型...类似地,使用java.lang包中Byte、Short、Long、Float、Double调相应方法可以将由“数字”字符组成字符串,转化为相应基本数据类型。...基本数据类型、包装 --> 字符串: 调用Stringpublic String valueOf(int n)可将int型转换为字符串 相应valueOf(byte b)、valueOf(long...字符数组 --> 字符串: String 构造器:String(char[]) 和 String(char[],int offset,int length) 分别用字符数组中全部字符和部分字符创建字符串对象

28920

String(1)

那么开始出发吧 String认识 ❤️❤️对于String这个类型,我们以前往往认为它是一个简单基本类型,但我们错了,对于String,它是一个,为引用类型。...而我们String位于java.lang包中,java.lang包是Java核心包,会自动导入到每个Java程序中。因此,在使用String时,无需显式导入。...,String提供常用查找方法: 注意其返回和输入int值我们可以认为是Stringvalue数组下标。...2.大小写转换 ❤️❤️大写转换用StringtoUpperCase, 小写转换用StringtoLowerCase public static void main(String[]...(当然字符串所创建引用能修改) String在设计时就是不可改变String实现描述中已经说明了,如下: 该图可以看出: 1.String字符实际保存在内部维护value

6710

String常用方法

(一):   indexOf()方法  返回指定字符串在此字符串第一次出现索引   返回类型:int   若是没有找到指定字符串 返回-1 (二):lastIndexOf方法  返回字符串在此字符串最后一次出现索引...返回类型 : int  结果: (三):charAt方法:  返回指定索引上字符  返回类型 :char 字符  结果: (四):endsWith方法  判断字符串是否以指定字符串结尾  返回类型...Boolean 结果: (五):isEmpty方法  判断字符串是否为空 只有当字符串长度为0是才返回true 返回值类型 :Boolea  结果: (六): startsWith方法  判断字符串是否以指定字符串开始...//返回值类型 Boolean  结果: (七): concat方法  将指定字符串连接到该字符串末尾。...返回值类型:String  结果: (八)Contains方法 判断字符串是否包含指定字符序列 返回值类型:Boolean  结果:

9610

模拟实现C++中string(详细解析)

_str); } 解析:拷贝构造跟构造函数实现方法差不多,区别就在于拷贝构造是将参数s属性内容全部拷贝到this中,所谓this,就是调用拷贝构造string对象指针。...而使用string自带,已经定义好string,并且是引用,不需要拷贝。所以我们来实现一下stringswap。...其实,我上面讲,虽然我们模拟实现stringswap,调用了stringswap,但效率是一样,因为实现代码是这样: void swap(string& s) { std:...四.模拟实现string对象修改操作 ①push_back() push_back实现,相当于数据结构中顺序表差不多,如果我们对顺序表实现熟悉的话,实现push_back一点问题都没有。...还有就是,在C++string库中,end类型就是size_t,我们既然要模拟实现string,我们就遵循规则。那么我们该如何取解决这个问题呢? 好办!

79320

C++STL——string与模拟实现

STL容器——string 什么是STL string 字符串标准 什么是string string常用接口介绍 string初始化 比较大小与赋值 容量 对象修改 访问及遍历操作 string...中swap与C++库中swap区别 非成员函数 string模拟实现 深浅拷贝与现代写法 什么是STL STL(standard template libaray-标准模板库):是C++标准库重要组成部分...对象 string(const string&s)用string对象构造新string对象 这类接口是调用构造函数。...string模拟实现 #include #include using namespace std; namespace baiye { class string...,之前说过默认拷贝函数只能实现浅拷贝无法实现深拷贝,需要自定义拷贝函数,与对象二。

23700

Java String

概述  字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 来创建和操作字符串。...jdk中提供非常多字符和字符串操作方法及构造方法,这里只介绍一些常用方法和构造方法。完整String方法可以参考官方API文档。...String下有非常多构造方法,这里只介绍几个常用String() public String(); 初始化新创建字符串对象,使其表示空字符序列。...(byte[] bytes, int offset, int length) 通过使用平台默认字符集解码指定 byte 子数组,构造一个新 String。...System.out.println(s2);//输出结果为D,从第0个开始长度为1个 } 结果: String(char[] value) 转换字符数组为字符串 示例代码: public

48910
领券