C++容器string的运用和注意

介绍

        首先,先说明,string在C++的string头文件中定义,而在C语言中的字符串就是字符数组,在C++中,string容器相当于C语言中的字符数组,string比C语言中的字符数组更为好用,如:C++中cin/cout可以直接读写string类型,但却不能读写字符数组,string还可以像整数那样"相加",并且string容器还支持许多流式的读写以及各种的函数和运算符操作,但是string的运算速度有些慢。


一,string的赋值操作

1,直接用string函数进行初始化

        具体功能和解释如下:

#include<iostream>
#include<string>
using namespace std;
int main()
{string s1;const char* a = "abcd";string s2(a);//进行初始化s2,等效于s2 = acout << "s2 = " << s2 << endl;s1 = s2;//不可s1 = a,因为在此种数组结构中string形式才可以直接赋值cout << "s1 = " << s1 << endl;string s4(10, 'a');//放入10个a,这里第二个参数只能是字符,不能是串cout << "s4 = " << s4 << endl;string s5(a, 1, 2);//从a第1个位置上开始的2个元素放入s5中cout << "s5 = " << s5 << endl;string s6("abcdef",5);//将串"abcdef"的前5个元素赋给s6cout << "s6 = " << s6 << endl; return 0;
}

        在这里要说明的是,运用以上方式进行赋值时不能先建立,后赋值,必须建立时就进行初始化。即:

//以下是错误的运用

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s1;
    const char* a = "abcd";
    string s2;
    s2(a);

    string s4;
    s4(10, 'a');

    string s5;
    s5(a, 1, 2);

    string s6;
    s6("abcdef", 5);
    return 0;
}

2,assrgn函数的赋值操作

        在很多情况我们需要对string进行赋值操作,若要用类似于以上的方式进行赋值,要用string容器中所支持的assign函数,如下代码:

//以下是正确的用法

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s1;
    const char* a = "abcd";
    string s2;
    s2.assign(a);

    string s4;
    s4.assign(10, 'a');

    string s5;
    s5.assign(a, 1, 2);

    string s6;
    s6.assign("abcdef", 5);
    return 0;
}

        以上是常见的assign四种赋值操作。

二,添加串append的运用

        append的作用跟C语言中的strcat函数作用相同(但要比此结构高级很多),此函数可在不不同位置进行添加,运用比较灵活。

        C++容器string中支持append的运用,此函数的用法与assig的用法一样,只是功能不同罢了,前面代码已经说明了很清楚了这种用法,在这里我就直接用代码跟大家演示:

#include<iostream>
#include<string>
using namespace std;
int main()
{string s7;s7.append("abc");//将" abc"加在s7的末尾cout << "s7 = " << s7 << endl;s7.append("abcdef", 3);//将数组"abcdef"的前3个字符加在s7的后面cout << "s7 = " << s7 << endl;s7.append(5, 'w');//将5个字符'w'加在s7的末尾cout << "s7 = " << s7 << endl;s7.append(s7, 4, 3);//截取从s7的第4个下标字符开始,往后的3个字符,下标从0开始cout << "s7 = " << s7 << endl;return 0;
}

三,string容器的插入,删除,访问,截取操作

        插入操作的函数是insert,删除操作的操作有erase和pop(其中erase的删除比较灵活,pop删除操作在string容器支持中只能删除首元素),访问元素可以用C语言中的符号"[]"或这C++中的at,截取操作有substr。具体使用如下代码:

#include<iostream>
#include<string>
using namespace std;
int main()
{//insert插入操作string s1 = "abc";s1.insert(1, "123");//从第1个位置起插入"123"串,下标从0开始cout << "s1 = " << s1 << endl;s1.insert(0, 2, '5');//向开头位置插入2个字符'5',第三个参数不能为串,只能为字符cout << "s1 = " << s1 << endl;//at访问操作,s.at(i)等效于s[i]string s = "abcdefg";cout << "s = ";for (int i = 0; i < s.size(); i++) {cout << s.at(i) << " ";}cout << endl;//erase和pop删除操作的运用string str1 = "abcdefg";str1.pop_back();//删除末尾元素的操作cout << "str1 = " << str1 << endl;str1.erase(1, 3);//从第1个下标起删除三个字符,下标从0开始cout << "str1 = " << str1 << endl;//substr获取截取子串的运用string str2 = "abcdef";string a = str2.substr(1, 3);//从str的第1个下标起截取3个字符赋给acout << "a = " << a << endl;return 0;
}

        总:以上就是C++中容器string的几种常规操作,对于初学者而言,C++的语法和运用层次虽然简单,但C++的语法过多,结构凌乱,可能导致学者容易过忘,本文章将其中常规的操作基本全部整理融合,方便学者学习可记忆,希望得到大家支持。

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

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

相关文章

利用 Python-user-agents 解析 User_Agent

利用 Python-user-agents 解析 User_Agen 需求分析 近期在尝试做一个登录日志的功能&#xff0c;及用户登录成功后我在后台进行一个用户的登录记录&#xff0c;两种解决方案&#xff1a; 由前端得到用户的手机型号&#xff0c;我在后台接收后在数据库进行保存使用User_Agent…

TF_SessionRun()各参数

如何使用Tensorflow C-API保存Tensorflow模型 C api中的所有操作都通过TF_SessionRun()函数执行。 此函数有12个参数&#xff1a; TF_CAPI_EXPORT extern void TF_SessionRun(TF_Session *session, // Pointer to a TF sessionconst TF_Buffer *run_options, //…

Linux中7种文件类型

Linux中文件类型 Linux中一切皆为文件。 查看文件类型&#xff08;输入以下命令根据第一列的第一个字符可区别文件类型&#xff09; ls -l目录文件 第一个字符为d 类似于Windows文件夹。 链接文件&#xff08;软链接&#xff09; 第一个字符为l 例如Windows的快捷方式&…

JDK7多线程并发环境HashMap死循环infinite loop,CPU拉满100%,Java

JDK7多线程并发环境HashMap死循环infinite loop&#xff0c;CPU拉满100%&#xff0c;Java HashMap底层数据实现是数组链表&#xff0c;链表在哈希碰撞后装入新数据&#xff0c;像是一个桶。 HashMap在JDK7的实现中&#xff0c;并发环境存在死循环infinite loop问题。导致的结果…

算法训练第五十七天

516. 最长回文子序列 - 力扣&#xff08;LeetCode&#xff09; 代码&#xff1a; class Solution { public:int longestPalindromeSubseq(string s) {vector<vector<int>> dp(s.size(),vector<int>(s.size(),0));for(int i 0;i < s.size();i){dp[i][i]…

PostgreSQL在进行除法时要注意

背景 整型除以整型&#xff0c;正常情况下当然得到的应该也是整型。数据库也是这么干的。 但是在数据库应用中&#xff0c;通常业务的需求是得到NUMERIC&#xff0c;不能直接把小数干掉。 数据库的行为给用户带来了诸多不便&#xff0c;例如1除以2&#xff0c;如果是整型除法会…

异常-java

目录 一、异常的概念和体系结构 1.1 异常的概念 1.2 异常的体系结构 1.3 异常的分类 二、异常的处理 2.1 防御式编程 2.2 异常抛出 2.3 异常捕获 2.4 异常处理流程 三、自定义异常类 一、异常的概念和体系结构 1.1 异常的概念 程序员在开发过程中&#xff0c;想要将代码写得…

<C++> STL_set/map

1.关联式容器 CSTL包含了序列式容器和关联式容器&#xff1a; 序列式容器里面存储的是元素本身&#xff0c;其底层为线性序列的数据结构。比如&#xff1a;vector&#xff0c;list&#xff0c;deque&#xff0c;forward_list(C11)等。关联式容器里面存储的是<key, value&g…

Centos7 + Apache Ranger 2.4.0 部署

一、Ranger简介 Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计。它可以对Hadoop生态的组件如HDFS、Yarn、Hive、Hbase等进行细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问权限。 1、组件列表 # Service Name Liste…

Springboot - 13.spring-boot-starter-security集成

&#x1f440;Spring Boot Starter Security 中文文档 Spring Security中文文档 &#x1f440;Spring Boot Starter Security 运行流程 当然可以。首先&#xff0c;我们会将用户存储和认证的流程融入整个Spring Boot Starter Security的使用流程中。以下是当你使用Spring Bo…

Excel VSTO开发4 -其他事件

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 4 其他事件 针对插件的事件主要有Startup、Shutdown这两个事件&#xff0c;在第2节中已经讲解。在开发窗口中&#xff0c;选择对象…

微信小程序检查版本更新

新建文件 version-util.js // 小程序启动时检查版本 class VersionUtil {/*** 检查更新*/checkUpdate(){const updateManager wx.getUpdateManager();updateManager.onCheckForUpdate((hasUpdate)>{if(hasUpdate){updateManager.onUpdateReady(()>{wx.showModal({title…

“谁天生是项目经理?四大特质决定你的机会“

大家好&#xff0c;我是老原。 但其实不少刚开始尝试项目管理的人&#xff0c;包括老原自己也曾经遇到过这样的问题&#xff1a; ▪ 自己没权没势&#xff0c;大家凭什么听我的&#xff1f; ▪ 资源受限&#xff0c;如何向老板争取更多资源&#xff1f; ▪ 怎样才能推进多方…

WebAssembly 在云原生中的实践指南

1 WebAssembly 介绍 WebAssembly&#xff08;Wasm&#xff09;是一种通用字节码技术&#xff0c;它可以将其他编程语言&#xff08;如 Go、Rust、C/C 等&#xff09;的程序代码编译为可在浏览器环境直接执行的字节码程序。 WebAssembly 的初衷之一是解决 JavaScript 的性能问…

【月报】Aavegotchi 开发进度更新 - 2023 年 8 月

嗨&#xff0c;Gotchigang&#xff01;2023 年的进程已经过了一半&#xff0c;我们团队一直在努力推动 Aavegotchi 生态系统迈向新的高度&#xff01;在本月的开发更新中&#xff0c;我们将分享在以下方面取得的进展&#xff1a; ● Gotchi 游戏 ● Gotchichain ● Aavegotc…

【iVX】十五分钟制作一款小游戏,iVX真有怎么神?

个人主页&#xff1a;【&#x1f60a;个人主页】 新人博主&#xff0c;喜欢就关注一下呗~ 文章目录 前言iVX介绍初上手布置背景制作可移动物体总结&#xff08;完善步骤&#xff09; 前言 在上篇文章中&#xff0c;我向大家介绍了一种打破常规的编程方式——iVX&#xff0c;可…

Go map转json

在Go中如何返回前端 字段名称/数量都不确定的json数据&#xff1f; 之前用Go写web服务&#xff0c;返回给前端的json格式的接口&#xff0c;有哪些要返回的字段都是明确的。都是预先定义一个结构体&#xff0c;json.Marshal一下即可~ 但当有的场景&#xff0c;要返回哪些字段不…

代码随想录day43|1049. 最后一块石头的重量 II494. 目标和474. 一和零

1049. 最后一块石头的重量 II class Solution:def lastStoneWeightII(self, stones: List[int]) -> int:target int(sum(stones)/2)dp [0] * (target1)for i in stones:for j in range(target ,-1 ,-1):if j>i:dp[j] max(dp[j],dp[j-i]i)# print(dp)return sum(stone…

RabbitMQ:hello结构

1.在Linux环境上面装入rabbitMQ doker-compose.yml version: "3.1" services:rabbitmq:image: daocloud.io/library/rabbitmq:managementrestart: alwayscontainer_name: rabbitmqports:- 6786:5672- 16786:15672volumes:- ./data:/var/lib/rabbitmq doker-compos…

【C++】函数重载 ④ ( 函数指针定义的三种方式 | 直接定义函数指针 | 通过 函数类型 定义 函数指针 | 通过 函数指针类型 定义 函数指针 )

文章目录 一、函数指针定义方法1、直接定义函数指针2、通过 函数类型 定义 函数指针3、通过 函数指针类型 定义 函数指针4、代码示例 - 不同方式定义函数指针 博客总结 : 重载函数 : 使用 相同 的 函数名 , 定义 不同 的 函数参数列表 ;判定标准 : 只有 函数参数 的 个数 / 类…