string 的常见用法详解_#include <string>-程序员宅基地

技术标签: c#  算法  c++  笔记  算法与编程(acm)  

目录

1.string 的定义

2.string 中内容的访问

3.string 常用函数实例解析


    在C语言中,一般使用字符数组 char str[]来存放字符串,但是使用字符串数组有时会显得操作麻烦,在C++中加入了string类型。

    注意,如果要使用string,需要添加 string头文件,即# include<string>  (注意 string. h 和 string 是不一样的头文件)。除此之外,还需要在头文件下面加上一句:“ using namespace std"。

即:

#include<string>

using namespace std;

1.string 的定义

定义和初始化和普通的数据类型一样:

string str;//定义变量
string str="abcd";//初始化

2.string 中内容的访问

(1)通过下标访问

一般来说,可以直接像字符数组那样去访问string。

程序代码:

#include<bits/stdc++.h>//万能头文件,里面包含头文件<string> 
#include<string>
using namespace std;
int main(){
	string str = "hello";
	for(int i=0;i<str.length();i++){
		printf("%c ",str[i]);
	}
	return 0;
}

运行结果:

 如果要读入和输出整个字符串,则只能用cin和cout.

程序代码:

//#include<bits/stdc++.h>
//万能头文件,里面包含头文件<string> 和 <iostream>
#include<iostream>//cin和cout在iostream头文件中,而不是stdio.h 
#include<string>
using namespace std;
int main(){
	string str;
	cin>>str;
	cout<<str<<endl;
	return 0;
}

运行结果:

 

(2)通过迭代器访问

一般仅通过(1)就可以满足访问的要求,但是有些函数比如insert()和erase()则要求以迭代器为参数,所以还是学一下迭代器的用法。

  定义string迭代器

string::iterator it;

这样就可以得到迭代器it,并且可以通过*it来访问string里的每一位:

程序代码:

#include<cstdio>
#include<string>
using namespace std;
int main(){
	string str = "abcd"; 
	for(string::iterator it = str.begin();it !=str.end();it++) {
		printf("%c",*it); 
	}
	return 0;
}

运行结果:

3.string 常用函数实例解析

(1)operator+=

这是string 的加法,可以将两个string直接拼接起来。

示例如下:

#include<iostream>
#include<string>
using namespace std;
int main(){
	string str1= "abcd",str2="xyz",str3;
	str3=str1+str2;//将str1和str2拼接,赋值给str3
	str1+=str2;//将str2直接拼接到str1上
	cout<<str1<<endl;
	cout<<str3<<endl;
	return 0;
}

输出结果:

 

(2) length()/size()

length()返回string的长度,即存放的字符数,时间复杂度为O(1)。size()与length()基本相同。

示例如下:

string str="abcxyz";

printf("%d %d\n"),str.length,str.size());

输出结果:

6 6

(3) insert()

insert(pos,string),在pos号位置插入字符串string。

示例如下:

#include<iostream>
#include<string>
using namespace std;
int main(){
	string str = "nihaoshijie"; 
	str.insert(2, "**");
	cout<<str<<endl;
	return 0;
}

输出结果:

(4) erase()

  • 删除单个元素

str.erase(it)用于删除单个元素,it为需要删除元素的迭代器。

示例如下:

#include<iostream>
#include<string>
using namespace std;
int main(){
	string str = "abcdefg";
	str.erase(str.begin()+4);//删除4号位(即e)
	cout<<str<<endl; 
	return 0;
}

输出结果:

 

  • 删除一个区间内的所有元素有元素

str.erase(pos,length),其中pos为需要开始删除的起始位置, length为删除的字符个数。

示例如下:

#include<iostream>
#include<string>
using namespace std;
int main(){
	string str = "abcdefg";
	str.erase(3,2);//删除从3号位开始的2个字符,即de 
	cout<<str<<endl; 
	return 0;
}

输出结果:

 

(5) clear()

clear()用以清空string中的数据,时间复杂度一般为O(1)。

代码示例:

#include<iostream>
#include<string>
using namespace std;
int main(){
	string str = "youdianlei"; 
	str.clear();	//清空字符串 
	cout<<str.length()<<endl;
	return 0;
}

输出结果:

 

(6) string::npos

    string:npos是一个常数,其本身的值为-1,但由于是 unsigned_int类型,因此实际上也可以认为是unsigned_int类型的最大值。string:npos用以作为find函数失配时的返回值。

(7) find()

         str.find(str2),当str2是str的子串时,返回其在str中第一次出现的位置;如果str2不是str的子串,那么返回 string::npos。

         str.find(str2,pos),从str的pos号位开始匹配str2,返回值与上相同。时间复杂度为O(nm),其中n和m分别为str和str2的长度。

示例如下:

输出结果:

 声明:本文内容摘自胡凡、曾磊老师主编的《算法笔记》书本内容。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_51472673/article/details/123233961

智能推荐

两个对象数组找相同元素或不同元素_快速获取两个数组某个元素对象相同值的元素-程序员宅基地

文章浏览阅读2.1k次,点赞3次,收藏18次。两个对象数组找相同元素或不同元素_快速获取两个数组某个元素对象相同值的元素

Springboot结合RabbitMQ案例_springboot rabbitmq实例-程序员宅基地

文章浏览阅读486次,点赞3次,收藏2次。1.整合SpringBoot之Fanout 模式生产者application.yml(默认的username和password是guest)# 服务端口server: port: 8080# 配置rabbitmq服务spring: rabbitmq: username: admin password: admin virtual-host: / host: 127.0.0.1 port: 5672OrderService.javapacka._springboot rabbitmq实例

Redis单节点安装、主从复制、java连接redis和Redis集群安装_redis单节点java连接-程序员宅基地

文章浏览阅读1.4k次。Redis单节点安装配置阿里云yum源 下载配置文件 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 生成缓存 yum makecache安装redis1、安装依赖 yum install -y gcc-c++ gcc tcl2、上传压缩包并解压 tar -xvf redis-3.0.0.tar.gz3、编译 cd redis-3.0.0 make_redis单节点java连接

Less-less导入其他less文件_less 外部文件-程序员宅基地

文章浏览阅读3.4k次。@import "triangle.less";// .less可省略@import "triangle.less";_less 外部文件

操作系统 - 进程调度的Java实现(FCFS,RR,HPF)_编写程序实现对5个进程的调度模拟,要求至少采用两种不同的调度算法分别进行模拟调-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏32次。文章目录实验要求具体思路调度算法介绍最高优先数优先的调度算法先来先服务算法其他算法代码实现最高优先数优先的调度算法实验要求用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。编写并调试一个模拟的进程调度程序,采用最高优先数优先调度算法对五个进程进行调度。 “最高优先数优先”调度算法的基本思想是把 CPU 分配给就绪队列中优先数最高的进程。静态优先数是在创建进程时确定的,并在整个进程运行期间不再改变。动态优先数是指进程的优先数在创建进程时可以给定一个初始值,并且可以按一_编写程序实现对5个进程的调度模拟,要求至少采用两种不同的调度算法分别进行模拟调

用pscp连接Linux出现access denied的问题_使用pscp.exe提示access denied-程序员宅基地

文章浏览阅读2k次,点赞4次,收藏3次。查了一下午,绕来绕去,后面终于搞懂是什么问题了pscp将windows的文件传输给Linux的命令是:命令格式:pscp 文件 用户名@LINUXIP:目录在@前面是用户名,即你登陆Linux时输入的名字,由于前面查的帖子大多直接给出了自己在电脑上的输入语句,跟着一写,就疏忽了用户名这个细节,写的都是博主的用户名,改过来就没有access的问题了还有两个细节:一是ip地址,我真的永远记不住自己的ip,哭了二是Linux下的文件名,一定要输入准确,最开始输入/home/时,显示我没有权限,后面改_使用pscp.exe提示access denied

随便推点

mui.css 滚动条消失 导致超出部分无法显示 overflow属性_mui 滚动条消失-程序员宅基地

文章浏览阅读405次。导入mui class属性mui-scroll-wrapper后,发现滚动条消失,页面无法滚动导致超出页面部分无显示.查看 class = "mui-scroll-wrapper"带来的样式,其中有个overflow= hidden去掉这个样式,发现滚动条就出现,可以向下滑动显示 下面的内容这是mui.css 默认样式所以再写一个overflow 覆盖 mui.css的默认样式演示:但是我发现 , 只要不是hidden , 其他的都可以实现.就要查 overflow的用法了:overfl_mui 滚动条消失

【ART-Pi与RT-Thread入门】⑤ART-Pi配置PWM设备(避坑指南,已验证)-程序员宅基地

文章浏览阅读1.8k次,点赞6次,收藏12次。文章目录开发环境创建项目步骤1:RT-Thread Studio项目设置步骤2:打开board.h宏定义步骤3:STM32CubeMX(或者STM32CubeIDE)配置3.0 新建基于STM32H750XBHx的项目。3.1 在Pinout view中配置PI5为TIM8_CH13.2 配置时钟3.3 RCC中配置使用外部高速晶振HSE3.4 TIM8配置CH13.5 设置代码输出选项3.6 点击Generate Code4. 修改board.c和board.h5. 修改main.c6. 避坑指南开发环_art-pi

在CentOS服务器上安装Tesseract完整版,附带解决错误的办法,Java程序进行图像识别_could not initialize class net.sourceforge.tess4j.-程序员宅基地

文章浏览阅读2k次。安装安装gcc、gcc-c++、make,如果有就不需要安装:yum install gcc gcc-c++ make 安装编译相关工具,没有的话编译时候可能报错:yum install autoconf automake libtool 安装对图片识别相关支持工具,没有这些在后续执行Tesseract命令时会报错,可以尝试一下:yum install libjpeg-devel l..._could not initialize class net.sourceforge.tess4j.tessapi at net.sourceforge

#MySQL各种bug汇总#_mysql bug 53352-程序员宅基地

文章浏览阅读2.6k次。目录1.MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server2.The MySQL server is running with the--skip-grant-tables option3.MySQL——修改root密码的4种方法(以windows为例)4."Host 'localhost' ..._mysql bug 53352

win10电脑显示网络未连接到服务器,教你win10电脑网络连接显示未连接不可用的方法...-程序员宅基地

文章浏览阅读7.3k次,点赞4次,收藏13次。win10电脑使用时间久了,会出现各种各样的故障问题,最常见属于网络问题。近期一位用户说电脑莫名其妙无法识别网络,桌面右下角提示“连接不可用”,无法上网是一个比较烦人...下面本站小编介绍下使用方法,希望大家喜欢!1.我们点击右下角的无线网络,打开网络和共享中心。2.点击“更改适配器设置”。3.在“网络连接”窗口,如果网络连接里面有无线网络连接是灰色情况,我们就右键点击“启用”。4.当网络连接里面..._未连接连接不可用

Mysql join大表优化案例_mysql left join 大表-程序员宅基地

文章浏览阅读4.3k次,点赞2次,收藏11次。Mysql join查询的相关原理,实现,由此推出的优化策略;join大表后进行groupby操作慢sql通过临时表+join进行优化_mysql left join 大表

推荐文章

热门文章

相关标签