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

news/2024/7/23 10:09:33 标签: c++, 数据结构

介绍

        首先,先说明,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 = a
	cout << "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个元素赋给s6
    cout << "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个字符赋给a
	cout << "a = " << a << endl;
	return 0;
}

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


http://www.niftyadmin.cn/n/5005155.html

相关文章

Hadoop的第二个核心组件:MapReduce框架第一节

Hadoop的第二个核心组件&#xff1a;MapReduce框架第一节 一、基本概念二、MapReduce的分布式计算核心思想三、MapReduce程序在运行过程中三个核心进程四、如何编写MapReduce计算程序&#xff1a;&#xff08;编程步骤&#xff09;1、编写MapTask的计算逻辑2、编写ReduceTask的…

【python爬虫实战】用python爬百度搜索结果!2023.3发布

文章目录 一、爬取目标二、展示结果数据三、编写爬虫代码3.1 请求头和cookie3.2 分析请求地址3.3 分析页面元素3.4 获取真实地址3.5 保存结果数据 四、同步讲解视频五、附完整源码 一、爬取目标 本次爬取目标是&#xff0c;百度搜索结果数据。以搜索”马哥python说“为例&…

SecureCRT安装、汉化、上传、美化

文章目录 SecureCRT安装、汉化、美化一、SecureCRT介绍二、SecureCRT下载三、SecureCRT汉化四、SecureCRT连接五、SecureCRT上传第一种方法&#xff1a;用SFTP 传输文件第二种方法&#xff1a;WinSCP传输文件 六、SecureCRT美化 SecureCRT安装、汉化、美化 一、SecureCRT介绍 …

华为云云服务器评测| 之性能测试

文章目录 前言软件安装扩展知识 收集服务器负载信息指令解析开始压测后台运行 stress 运行 sysbench 测试网络带宽总结 测试磁盘 I/O 性能I/O 性能评估总结 前言 在当今数字化时代&#xff0c;云计算作为一种高效、灵活的计算方式&#xff0c;正日益受到企业和个人用户的广泛关…

jupyter 格式化与快捷键

1、标题&#xff1a; # 一级标题 ## 二级标题 ### 三级标题 2、 加粗文本&#xff1a; **加粗文本** 3、斜体文本&#xff1a; _斜体_ 4、删除线 ~删除线~ 5、高亮文本 高亮文本 6、区块引用 > 我是引用文字 >> 我是第二层 >&g…

多线程按顺序打印abc

使用synchronized 实现 synchronized原理 public class ThreeThreads {public static void main(String[] args) throws InterruptedException {Object a new Object();Object b new Object();Object c new Object();ThreadPrint threadPrint1 new ThreadPrint("a&q…

网工内推 | 国企专场,网络运维工程师,华为/思科认证优先

01 中百集团 招聘岗位&#xff1a;运维工程师 职责描述&#xff1a; 1、对集团内使用云计算架构&#xff08;Kubernetes&#xff09;的系统进行规划、运维及管理相关工作。 2、对集团数据中心系统的大数据基础架构&#xff08;Cloudera Distribution Hadoop&#xff09;的规划…

dantax参数调优

dantax参数调优 1.speed调优 可能会导致数据倾斜 处理的速度不同&#xff0c;可能会导致job非常慢 举例子&#xff0c;比如总限速是每秒100条record&#xff0c;其中第一个channel速度是每秒99条record&#xff0c;第二个channel是每秒1条record&#xff0c;加起来是每条100条…