String类1⃣️

目录

预备知识

1.string成员函数

1.string() 

2.string (const char* s);

3.string (size_t n, char c);

4.string (const string& str);(拷贝构造)

2.string类对象的容量操作

1.size == length

2.max_size

3.resize

 4.capacity

5.empty

6.clear

7.reserve

8.resize

3.string类对象的访问及遍历操作


预备知识

创建一个string对象并初始化

int main(int argc, const char * argv[]) {
    string s1 = "hello world";
    cout << s1 <<endl;
    string s2("hello world");
    cout << s2 <<endl;
    string s3(s2);
    cout << s3 << endl;

        // 不常用 了解
        string s4(s2, 3, 5);
        string s5(s2, 3);
        string s6(s2, 3, 30);
        string s7("hello world", 5);
        string s8(10, 'x');
    return 0;
}

1.string成员函数

1.string() 

构造空的string类对象,即空字符串

2.string (const char* s);

int main(int argc, const char * argv[]) {
    char s[] = "abcd";
    string s1 = s;
    cout << s1 << endl;
    return 0;
}
输出结果:abcd

3.string (size_t n, char c);

int main(){
    string s1(10,'x');
    cout << s1 << endl;
    return 0;
}
输出结果:xxxxxxxxxx

4.string (const string& str);(拷贝构造)

int main(){
    string s1(10,'x');
    //cout << s1 << endl;
    string s2 = s1;//拷贝构造
    cout << s2 << endl;
    return 0;
}
输出结果:xxxxxxxxxx

2.string类对象的容量操作

1.size == length

返回字符串有效字符长度

 

int main(){
    string s1(10,'x');
    string s2 = s1;//拷贝构造
    cout << s2 << endl;
    cout << s2.size() <<endl;
    cout << s2.length() <<endl;
    return 0;
}
输出:
10
10

2.max_size

int main(){
    string s1(10,'x');
    string s2 = s1;//拷贝构造
    cout << s2 << endl;
    cout << s2.size() << endl;
    cout << s2.length() <<endl;
    cout << s2.max_size() << endl;
    return 0;
}
输出:
xxxxxxxxxx
10
10
9223372036854775791//64位下

3.resize

将有效字符的个数成为n个,多出的空间用字符c填充

 

int main(){
    string s1 = "Greatness,it is just something we made up.";
    cout << s1 << endl;
    cout << s1.size() << endl;
    s1.resize(s1.size()+2, 'x');
    cout << s1 << endl;
    cout << s1.size() << endl;
    s1.resize(20);
    cout << s1 << endl;
    cout << s1.size() << endl;
    
    return 0;
}
输出结果:
Greatness,it is just something we made up.
42
Greatness,it is just something we made up.xx
44
Greatness,it is just
20

 4.capacity

(返回空间总大小)

int main(){
    string s1 = "Greatness,it is just something we made up.";
    cout << s1 << endl;
    cout << s1.size() << endl;
    cout << s1.capacity() <<endl;
    return 0;
}
//输出结果
Greatness,it is just something we made up.
42
47

5.empty

检测字符串是否为空串,是返回true,否则返回false

int main(){
    string s1 = "Greatness,it is just something we made up.";
    cout << s1.empty()<< endl;
    cout << s1 <<endl;
    string s2;
    cout << s2.empty() <<endl;
    return 0;
}
输出结果:
0
Greatness,it is just something we made up.
1

 

6.clear

清空有效字符

int main(){
    string s1 = "Greatness,it is just something we made up.";
    s1.clear();
    cout << s1 <<endl;
    return 0;
}
输出为空

 

7.reserve

为字符串预留空间,改变的是capacity

int main(){
    string s1 = "Greatness,it is just something we made up.";
    cout << s1.capacity() <<endl;
    s1.reserve(100);
    cout << s1.capacity() <<endl;
    cout << s1 <<endl;
    return 0;
}
输出结果:
47
111
Greatness,it is just something we made up.

8.resize

将有效字符的个数改为n个,多出的空间用字符c填充

int main(){
    string s1 = "Greatness,it is just something we made up.";
    cout << s1.size() << endl;
    s1.resize(60, 'x');
    cout << s1.size() << endl;
    cout << s1 << endl;
    return 0;
}
输出结果
42
60
Greatness,it is just something we made up.xxxxxxxxxxxxxxxxxx

注意:

1. size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一 致,一般情况下基本都是用size()。

2. clear()只是将string中有效字符清空,不改变底层空间大小。

3. resize(size_t n) 与 resize(size_t n, char c)都是将字符串中有效字符个数改变到n个,不同的是当字符个数增多时:resize(n)用0来填充多出的元素空间,resize(size_t n, char c)用字符c来填充多出的 元素空间。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大 小,如果是将元素个数减少,底层空间总大小不变。

4. reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于 string的底层空间总大小时,reserver不会改变容量大小。

3.string类对象的访问及遍历操作

int main(){
    string s1("hello world");
        
        // 遍历方式1:下标+[]
        for (size_t i = 0; i < s1.size(); i++)
        {
            cout << s1[i] << " ";
        }
        cout << endl;

        //遍历方式2: 迭代器
        //string::iterator it1 = s1.begin();
        auto it1 = s1.begin();
        while (it1 != s1.end())
        {
            *it1 += 3;//'h' + 3 = 'k'

            cout << *it1 << " ";
            ++it1;
        }
        cout << endl;

        //遍历方式3: 范围for
        // 底层角度,他就是迭代器
        cout << s1 << endl;
        for (auto& e : s1)
        {
            e++;
            cout << e << " ";
        }
        cout << endl;
        cout << s1 << endl;
    return 0;
}
输出结果:
h e l l o   w o r l d 
k h o o r # z r u o g 
khoor#zruog
l i p p s $ { s v p h 
lipps${svph
void test_string5()
{
    const string s1("hello world");
    //string::const_iterator it1 = s1.begin();
    auto it1 = s1.begin();
    while (it1 != s1.end())
    {
        // 不能修改
        //*it1 += 3;

        cout << *it1 << " ";
        ++it1;
    }
    cout << endl;

    //string::const_reverse_iterator cit1 = s1.rbegin();
    auto cit1 = s1.rbegin();
    while (cit1 != s1.rend())
    {
        // 不能修改
        //*cit1 += 3;

        cout << *cit1 << " ";
        ++cit1;
    }
    cout << endl;

    string s2("hello world");
    string::reverse_iterator it2 = s2.rbegin();
    //auto it2 = s2.rbegin();
    while (it2 != s2.rend())
    {
        //*it2 += 3;

        cout << *it2 << " ";
        ++it2;
    }
    cout << endl;
}

int main(){
    test_string5();
    return 0;
}
输出结果:
h e l l o   w o r l d 
d l r o w   o l l e h 
d l r o w   o l l e h 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【leetcode面试经典150题】78.二叉树中的最大路径和(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

元数据管理在态势感知系统的应用

在当今信息爆炸的时代&#xff0c;数据量呈指数级增长&#xff0c;如何高效地管理和利用这些数据成为了各行各业所面临的重要问题。在网络安全领域&#xff0c;态势感知系统作为一种重要的安全防御工具&#xff0c;承担着及时发现、分析和应对安全威胁的重任。 然而&#xff0c…

网络层 --- IP协议

目录 1. 前置性认识 2. IP协议 3. IP协议头格式 3.1. 4位版本 3.2. 4位首部长度 3.3. 8位服务类型 3.4. 16位总长度 3.5. 8位生存时间 TTL 3.6. 8位协议 3.7. 16位首部检验和 3.8. 32位源IP和32位目的IP 4. 分片问题 4.1. 为什么要分片 4.2. 分片是什么 4.2.1. …

助力企业部署国产云原生数据库 XSKY星辰天合与云猿生完成产品互兼容认证

近日&#xff0c;北京星辰天合科技股份有限公司&#xff08;简称&#xff1a;XSKY 星辰天合&#xff09;与杭州云猿生数据有限公司&#xff08;简称“云猿生”&#xff09;完成了产品互兼容认证&#xff0c;星辰天合企业级分布式统一数据平台 XEDP 与云猿生的开源数据库管控平台…

JAVA系列 小白入门参考资料 继承

目录 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 父类成员访问 4.1 子类中访问父类的成员变量 1. 子类和父类不存在同名成员变量 2. 子类和父类成员变量同名 4.2 子类中访问父类的成员方法 1. 成员方法名字不同 2. 成员方法名字相同 ​5. super关键字 …

《ElementPlus 与 ElementUI 差异集合》el-dialog 显示属性有差异

ElementPlus 用属性 v-model ElementUI 用属性 visible 其实也是 Vue2/Vue3 的差异&#xff1a;v-model 指令在组件上的使用已经被重新设计&#xff0c;替换掉了 v-bind.sync

自己手写了一个大模型RAG项目-05.基于知识库的大模型问答

大家好&#xff0c;我是程序锅。 github上的代码封装程度高&#xff0c;不利于小白学习入门。 常规的大模型RAG框架有langchain等&#xff0c;但是langchain等框架源码理解困难&#xff0c;debug源码上手难度大。 因此&#xff0c;我写了一个人人都能看懂、人人都能修改的大…

力扣HOT100 - 79. 单词搜索

解题思路&#xff1a; 深度优先搜索&#xff08;DFS&#xff09; 剪枝。 class Solution {public boolean exist(char[][] board, String word) {char[] words word.toCharArray();for(int i 0; i < board.length; i) {for(int j 0; j < board[0].length; j) {if (df…

Springboot+MybatisPlus入门案例(postman测试)

一、项目框架 pom.xml依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apac…

微软如何打造数字零售力航母系列科普04 - 微软联合Adobe在微软365应用程序中工作时推出新的生成式AI功能

微软和Adobe正在合作&#xff0c;将情境营销见解和工作流程引入微软Copilot&#xff0c;以提供生成的人工智能功能&#xff0c;使营销人员和营销团队能够在自然的工作流程中实现更多目标。 这些新的集成功能将在生产力和协作工具&#xff08;如Outlook、Teams和Word&#xff0…

【保姆级教程】用IDEA2023版本给RuoYi-Vue添加子模块

文章目录 前言添加子模块新建子模块新建子模块界面&#xff1f;新建子模块界面&#xff01; 修改pom依赖配置RuoYiApplication添加测试接口配置接口权限测试 前言 若依前后端分离框架能够极大方便当前开发任务&#xff0c;并且使用的技术栈也相当丰富&#xff0c;但是目前只提…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(六)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 12 - 13节&#xff09; P12《11.ArkUI组件-循环控制》 forEach() 方法的使用方式&#xff1a; 在预览界面点击红框的按钮&#xf…

煤矿综合自动化智能监控系统

系统概述 建设煤矿井上下工业环网、工业数据集成平台、排水、供电、运输、通风、压风、瓦斯抽放、采掘、智能洗煤厂等智能自动化控制系统&#xff0c;利用多种软硬件接口(OPC协议、驱动通讯、数据库、文本文件、DDE/NETDDE、子网等)&#xff0c;构建全矿井统一、稳定、高效的数…

vue2 实现echarts图表进入可视区域后再加载动画,以及 使用了resize之后,动画失效问题解决

Intersection Observer API 是一个现代的浏览器 API&#xff0c;用于监测一个或多个目标元素与其祖先元素或视窗&#xff08;viewport&#xff09;之间的交叉状态&#xff08;intersection&#xff09;的变化。它可以有效地监听元素是否进入或离开可视区域&#xff0c;从而实现…

使用OkHttp 缓存 API 调用提高Android应用性能

使用OkHttp 缓存 API 调用提高Android应用性能 坦率地说&#xff0c;我们都遇到过这样的情况——焦急地刷新应用&#xff0c;看着加载图标不停地旋转&#xff0c;等待那个至关重要的 API 响应。这样的等待我们已经是炉火纯青了&#xff0c;是吧&#xff1f;手指有节奏地轻敲屏…

记录些RAG-Fusion、Agent、NL2SQL的问题

RAG-Fusion RAG-Fusion 的实现原理 Query Duplication with a Twist&#xff1a;用 LLM 根据用户的 Query 生成几个相关的但不同的 Queries。Vector Search Unleashed&#xff1a;对原 Query 和生成的 Queries 都进行向量&#xff08;或者其他方式的&#xff09;搜索。Intell…

基于Springboot的滑雪场管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的滑雪场管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&a…

摩根大通推出创新工具 FlowMind,引领金融自动化新变革

近日&#xff0c;摩根大通人工智能研究部推出了一款极具创新性的工具——FlowMind&#xff0c;为金融行业带来了全新的工作模式和效率提升。 FlowMind 能够自动化金融工作流程&#xff0c;在信贷审批、风险评估、合规监测等重要任务中发挥着关键作用。它利用 GPT 自动生成工作…

泽攸科技无掩膜光刻机在MEMS压力传感器制造中的应用

在当今的科技快速发展时代&#xff0c;微电子机械系统&#xff08;MEMS&#xff09;技术已成为推动现代传感器技术革新的关键力量。MEMS压力传感器&#xff0c;作为其中的重要分支&#xff0c;广泛应用于生物医学、航空航天、汽车工业等多个领域。随着对传感器性能要求的不断提…

探索Jellyfin:支持Android的自由开源的媒体服务器平台

探索Jellyfin&#xff1a;支持Android的自由开源的媒体服务器平台 I. 简介 A. 什么是Jellyfin&#xff1f; Jellyfin是一个自由开源的媒体服务器平台&#xff0c;旨在让用户能够自主管理和流式传输他们的媒体内容。与许多闭源的商业媒体服务器解决方案不同&#xff0c;Jelly…