C++ string

C++——list和string C++容器的学习开始啦!大家先来学习list!紧接着string和vector也会一一呈现!大家继续加油吧!这次的模拟实现就到这里啦这些只是建议的模拟,目的是让大家更充分的了解容器的使用如果对于里面一些知识不了解的话,可以看看前面的博客哟大家继续加油吧! 阅读详情
  • 初始化string 对象的方式

    string s1;默认构造函数 s1 为空串
    string s2(s1);将 s2 初始化为 s1 的一个副本
    string s3(“value”);将 s3 初始化为一个字符串字面值副本
    string s4(n, ‘c’);将 s4 初始化为字符 ‘c’ 的 n 个副本
  • string 对象的读写

    • 读取并忽略开头所有的空白字符(如空格,换行符,制表符)。
    • 读取字符直至再次遇到空白字符,读取终止。
    1、读取一行

    int main()
    {
    string s; // empty string
    cin >> s; // read whitespace-separated string into s //输入hello world
    cout << s << endl; // write s to the output	//输出hello
    return 0;
    }
    

    2、可以把多个读操作或多个写操作放在一起

    string s1, s2;
    cin >> s1 >> s2; // read first input into s1, second into s2     //输入 hello world
    cout << s1 << s2 << endl; // write both strings		//输出 helloworld
    

    3、读入未知数目的string 对象
    string 的输入操作符也会返回所读的数据流,因此,可以把输入操作作为判断条件

    int main()
    {
    	string word;
    	// read until end-of-file, writing each word to a new line
    	while (cin >> word)
    	cout << word << endl;
    	return 0;
    }
    

    4、使用getline 读取整行文本
    getline 并不忽略行开头的换行符。只要 getline 遇到换行符,即便它是输入的第一个字符,getline 也将停止读入并返回

    int main()
    {
    	string line;
    	// read line at time until end-of-file
    	while (getline(cin, line))
    	cout << line << endl;
    	return 0;
    }
    
  • string 对象的操作

    s.empty()如果 s 为空串,则返回 true,否则返回 false。
    s.size()返回 s 中字符的个数
    s[n]返回 s 中位置为 n 的字符,位置从 0 开始计数
    s1 + s2把 s1 和s2 连接成一个新字符串,返回新生成的字符串
    s1 = s2把 s1 内容替换为 s2 的副本
    v1 == v2比较 v1 与 v2 的内容,相等则返回 true,否则返回 false
    !=, <, <=, >, and >=保持这些操作符惯有的含义
  • string::size_type 类型

    string size() 操作返回的是 string::size_type 类型的值,是 unsigned int型

  • string 关系操作符

    string 对象比较操作是区分大小写的,任何一个大写之母都小于任意的小写字母。
    比较策略:
    • 如果两个 string 对象长度不同,且短的 string 对象与长的 string 对象的前面部分相匹配,则短的 string 对象小于长的 string 对象。
    • 如果 string 对象的字符不同,则比较第一个不匹配的字符

  • string 对象的赋值

    // st1 is an empty string, st2 is a copy of the literal
    string st1, st2 = "The expense of spirit";
    st1 = st2; // replace st1 by a copy of st2
    
  • 两个string 对象相加

    string s1("hello, ");
    string s2("world\n");
    string s3 = s1 + s2; // s3 is hello, world\n
    
  • 和字符串字面值的连接

    + 操作符的左右操作数必须至少有一个是 string 类型的

    string s1 = "hello"; // no punctuation
    string s2 = "world";
    string s3 = s1 + ", "; // ok: adding a string and a literal
    string s4 = "hello" + ", "; // error: no string operand
    string s5 = s1 + ", " + "world"; // ok: each + has string operand
    string s6 = "hello" + ", " + s2; // error: can't add string literals
    
  • 从string 对象获取字符

    string 类型通过下标操作符([ ])来访问 string 对象中的单个字符。下标操作符需要取一个 size_type 类型的值,来标明要访问字符的位置。
    string 对象的下标从 0 开始。如果 s 是一个 string 对象且 s 不空,则 s[0] 就是字符串的第一个字符, s[1] 就表示第二个字符(如果有的话),而 s[s.size() - 1] 则表示 s 的最后一个字符。
    string 对象的索引变量最好也用 string::size_type 类型。

    string str("some string");
    for (string::size_type ix = 0; ix != str.size(); ++ix)
    cout << str[ix] << endl;
    
  • string find函数

    size_type find(const string & str, size_type pos = 0) const从字符串的pos位置开始,查找子字符串str。如果找到,则返回该子字符串首次出现时其首字符的索引;否则,返回string::npos
    size_type find(const char * s, size_type pos = 0) const从字符串的pos位置开始,查找子字符串s。如果找到,则返回该子字符串首次出现时其首字符的索引;否则,返回string::npos
    size_type find(const char * s, size_type pos = 0, size_type n) const从字符串的pos位置开始,查找s的前n个字符组成的子字符串。如果找到,则返回该子字符串首次出现时其首字符的索引;否则,返回string::npos
    size_type find(const char ch, size_type pos = 0) const从字符串的pos位置开始,查找字符ch。如果找到,则返回该子字符串首次出现的位置;否则,返回string::npos
  • 字符数组与string的相互转换

    1、字符数组转化成string类型

    char ch [] = "ABCDEFG";
    string str(ch);//也可string str = ch;
    或者
    char ch [] = "ABCDEFG";
    string str;
    str = ch;//在原有基础上添加可以用str += ch;
    

    2、将string类型转换为字符数组

    char buf[10];
    string str("ABCDEFG");
    length = str.copy(buf, 9);
    buf[length] = '\0';
    或者
    char buf[10];
    string str("ABCDEFG");
    strcpy(buf, str.c_str());//strncpy(buf, str.c_str(), 10);
    
  • 迭代器iterator

    string::iterator it;
    string str = "abcdefghijklmn";
    
    //s.begin()      返回字符串s第一个字符的位置
    char a = *(str.begin());           // a
    
    //s.end()        返回字符串s最后一个字符串的后一个位置
    char b = *(str.end()-1);           // n
    
    //s.rbegin()     返回字符串s最后一个字符的位置
    char c = *(str.rbegin());          // n
    
    //s.rend()       返回字符串s第一个字符的前一个位置
    char d = *(str.rend()-1);          // a
    
    for (string::iterator iter = str.begin(); iter != str.end(); iter++)
    {
        cout << *iter;                // 依次输出"abcdefghijklmn"
    }
    	```
    
  • 反向迭代器reverse_iterator

    class Solution {
    public:
        int lengthOfLastWord(string s) {
            int cnt =0;
            string::reverse_iterator  it = s.rbegin();
            for(it= s.rbegin() ; it != s.rend(); ++it)
            {
                if(*it >= 'A' && *it <='z')
                {
                    ++cnt;
                    if((it+1) != s.rend() &&  *(it+1) == ' ')
                    {
                        return cnt;
                    }
                }
            }
            return cnt;
        }
    };
    
  • 插入

    string str = "hello world";
    string str2 = "hard ";
    string str3 = "it is so happy wow";
    
    s.insert(s.it,n,ch)                 在字符串s的it指向位置上插入n个字符ch
    str.insert(str.begin()+6, 4, 'z');                             // str = "hello zzzzworld"
    
  • 删除

    string str = "welcome to my blog";
    
    //s.erase(s.ita,s.itb)                             把当前字符串s的[ita,itb)删除
    str.erase(str.begin()+11, str.begin()+14);         // str = "welcome to blog"
    
  • 翻转

    string str = "abcdefghijklmn";
    reverse(str.begin(),str.end());       // str = "nmlkjihgfedcba"
    
【C++ • STL】探究string的源码 浅拷贝、浅拷贝、string的模拟实现(传统和现代) 阅读详情

相关推荐

《C++ string 完全指南:string的模拟实现》

本文中作者讲述了string的模拟实现以各个接口的细节与图解!让你更清晰地感受STL的魅力

铭哥不写bug的博客 1296

在C++中可以用3种方法访问一个字符串

用字符数组存放一个字符串 【例6.10】定义一个字符数组并初始化,然后输出其中的字符串。 #include using namespace std;int main( ){ char str[]="I love CHINA!"; coutstrendl; return 0;} 运行时输出: I love CHINA! 用字符串变量存放字符串 【例6

u011555996的博客 1438

工业4.0 底层逻辑

工业4.0 的概念已经被滥用了,它与物联网,工业物联网等概念一样,几乎什么都往里面装。演变成了一句口号和愿景。许多人并不清楚工业4.0的底层逻辑到底是什么?如何遵循工业4.0 的思想构建新一代智能制造系统?并没用清晰地展示工业4.0的技术路线图。

姚家湾博客 1996

C++ 访问字符串元素的几种方法

C++ 访问字符串元素的几种方法 在代码学习中经常会用到字符串,下面介绍几种访问字符串内元素的几种方法 首先定义一个string类型的字符串,需要添加<string>头文件(注意string.h和string的区别,可参考string和string.h的区别) #include<string> #include<iostream> using namespace std; string str=" "; 通过下标访问 和字符数组一样,字符串可以直接用下标进行访问 ch

小白的博客 6227

相控阵雷达仿真入门:TWS与TAS模式实战解析(附代码示例)

本文深入解析相控阵雷达仿真中的TWS(边搜索边跟踪)与TAS(搜索加跟踪)模式,提供实战代码示例和优化策略。通过简化模型设计和对象化建模,帮助开发者快速构建高效仿真系统,适用于军事推演和装备评估。文章涵盖核心逻辑、数据结构设计及性能优化技巧,提升仿真效率与准确性。

weixin_30687051的博客 453

C++上机——2023年“信息与未来”小学生编程思维展示官方题解

本次活动前三题是“根据问题描述实现代码”类型的问题,题解和示例代码由人工智能GPT-4直接阅读题面后生成――只要熟悉C++的语法和基本的编程、调试,即可解决p1、p2、p3。后三题有一定的算法性,我们给出命题思路和一些可能的解法。注意:本题解是面向指导教师的;指导教师在讲解时可以根据学生掌握程度进行调整。

qq_39127687的博客 2297

C++中如何访问字符串中的单个字符

访问字符串中的单个字符 访问字符串中的单个字符是像字符数组那样使用下标访问字符串中的某个元素。 #include <iostream> int main(int argc,const char* argv[]) { std::string str1 = "Hello World!"; //向访问字符数组那样,将字符串中的第二个字符提取出来显示,如果下标越界,不会报告错误。 s...

wjy741223284的博客 1万+

Unity UI适配实战:从Canvas Scaler到主流游戏适配方案解析

本文深入解析Unity UI适配的核心技术,重点介绍Canvas Scaler组件的关键参数如Reference Resolution和Screen Match Mode,并提供主流游戏适配方案实战分析。通过九宫格拉伸、动态调整等技巧,帮助开发者解决多设备适配难题,提升游戏UI在不同分辨率下的表现。

weixin_29001419的博客 972

访问string对象的每个字符的三种做法

1.通过下标访问 int main() { string str("Hello world"); for(string::size_type st=0;st<str.size();++st){ cout<<str[st]; } return 0; } 2.通过迭代器访问 int main() { string str("Hello world"); for(string::iterator iter=str.begin();iter!=str.end();++it

sinat_33531884的博客 2065

Clawdbot完 整安装与使⽤指南(保姆级教程)

Clawdbot 是⼀款开源个⼈ AI 智能体(Personal AI Agent),核⼼优势为本地部署+系统级执⾏+全渠道交互,可通过聊天⼯具(Telegram/WhatsApp 等)下达指令,⾃动完成⽂件整理、代码部署、⽇程同步等任务,所有数据本地存储,隐私零泄露。截⾄2026年 1 ⽉,GitHub 星标突破 4 万+,⽀持 Windows/Mac/Linux/云服务器多平台。

A1609926242的博客 1615

复旦微实现串口在线升级BOOT.BIN

将该 demo 生成的 app(升级用)和 fsbl、最简化 bit 文件(可选)打包成 BOOT.BIN,作为 golden image 烧写在 qspi flash 偏移 0 地址开始的位置,其中最简化 bit 文件为在线升级功能提供必要的物理通道(如果不需要,可以不打包该文件),golden image 一旦发布基本不需要进行升级,由该 golden image 负责和上位机进行通信交互,完成业务 app、业务 bit 文件、uboot 以及操作系统 image 等文件在线升级,在qspi flash

wangjie36的博客 3174

c++读取字符串和字符的6种函数

综述: 字符串或字符的输入有好多个函数,scanf、getline()、cin.getline()、cin.get()、gets()、getchar()等 如果输入是不带空格的字符串,那用什么都可以了,建议用scanf或cin 如果输入带空格,那scanf、cin就用不了了,可以考虑以下方法: 如果想用string类型的话,就用getline(cin, s) 如果想用字符数组类型的话,可以用**cin.getline()、cin.get()、gets(),**这里不是特别建议用gets(),因为这个函数

Suryxin's blogs 2万+

QT-Creator安装教程(windows)

本文介绍了Qt的下载安装步骤:1)通过镜像源下载安装包;2)运行exe文件时使用命令行参数指定镜像地址;3)在安装过程中选择路径和自定义安装组件,包含QT5和QT6版本的详细安装说明;4)安装后可继续添加扩展包或卸载组件。重点提示了QT6必须勾选的关键组件,并提供了组件管理的操作方法。

qq_53545309的博客 3108

C++中简单自己实现一个string类

工具VS2017 MyString.h #pragma once #include<iostream> using namespace std; class MyString { friend ostream & operator<<(ostream &os, const MyString& s); friend istream & ...

Dxs4396的博客 4274

HALCON机器视觉之结合LMI Gocator 5504进行手机折叠屏异物、折痕和胶体检测(基于C# + HALCON)

手机折叠屏是一种创新的屏幕技术,它允许屏幕在一定程度上进行折叠,从而在便携性和屏幕尺寸之间取得平衡。这种屏幕通常由多层材料组成,包括柔性显示层、保护层和胶水层等。本文将详细介绍如何使用C#编程语言,结合HALCON和LMI Gocator 5504来实现手机折叠屏的异物、折痕和胶体检测。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 9321

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【C++札记】实现C++的string类

C++有了string类使得操作字符串变得很方便。有关string类,面试过程中也经常问到的就是自己实现一个sring类。下边实现个String类供大家参考: String.h #pragma once class String { public: //构造函数 String(const char* str = nullptr); //拷贝构造函数 String(const St...

码农code之路 325

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

CPP简单实现string类

摘要:本文展示了一个自定义字符串类string的实现,包含构造函数、拷贝构造、析构函数等基本功能,以及字符串操作(append、push_back、insert、erase等)、查找(find)和子串(substr)等功能。类中通过动态内存管理存储字符串数据,并实现了迭代器支持和运算符重载(如[]、+=、<等),是一个完整的字符串类实现示例。

weixin_39559852的博客 259

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【C++】string类中常用函数的模拟实现

【C++】string类中常用函数的模拟实现

2303_80737493的博客 2423

c++中string的cow机制以及其为何在cpp11后不再被支持

本文起因 今天学习《Effective STL》的时候看到条款15,里面提到了有些stl的string实现里可能会有RefCount字段做引用计数,在实验相关内容后发现该字段已经在c++11中被废弃,为了琢磨明白为什么会废弃,进行了一番搜索,最后整理为本文。 RefCount介绍 书中介绍的一种string实现如下图。 其中RefCount字段是为了在copy string对象时避免直接重新分配内存,并拷贝字符串数据而设计的。比如在下面这段代码中,str2在赋值时拷贝了str1的数据,但实际上s

x670127565的博客 2751

Cpp中string使用

Cppstring的使用:创建初始化,赋值,使用函数等相关内容。 #include <string> #include <cstring> #include <string.h>

Aslixzhou 5010

9.23 My_string.cpp

【代码】9.23 My_string.cpp。

GS优快云eo的博客 536

cpp的string类

本篇将讲述string类中的各种重要和常用函数(string()、begin()、rbegin()、cbegin()、crbegin()、end()、rend()、cend()、crend()、范围for、size()、resize()、capacity()、reserve()、clear()、empty()、append()、push_back()、insert()、erase()、replace()、swap()、find()、rfind()、substr()、compare())。

2401_84018574的博客 979

C++_认识STL及使用及实现第一个容器string

不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

心动的那一刻,记忆便盛开了花 1001

C++初阶——简单实现string

简单实现std::string类及一些常用的成员函数。迭代器,使用指针简单代替。

博客 | 复习知识点 + 练习 + 最终的领悟 | 全力以赴 445

c++初阶--string类的实现

大家好,今天我们来实现一下string类,只给出代码,就不进行讲解了。string.cpp文件。string.h文件。test.cpp文件。

2302_79606537的博客 228

【C++】string

个人主页:NiKo C++专栏:C++程序设计

zwznzje的博客 2009
上一篇: C++ 接口和抽象类
下一篇: C++ vector
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值