C++——string类的使用

1、string的构造

        在  c plus plus  这个网站上可以查到相关的信息,

(1)是无参构造函数(也是默认构造),就是一个空字符串

(2)是一个拷贝构造,传入一个参数构造字符串

 (3)是一个有参构造,参数有点复杂,他有一个字符串,在字符串的pos位置,取len个字符,这个len有缺省值,len=npos,npos是一个无符号整型的-1,表示此类型的最大值,也就是无符号整形中最大的值,

假设我们不给len传参,就是从pos位置,取到字符串的末尾,然后赋值给s3;

我们给len赋值,就是从pos位置取len个字符,然后赋值给s3;

 (4)是用一个C-string来构建,C-string指的就是结尾带/0的字符串,

(5)是取字符串前n个字符

 (6)是构造n个’c'字符,组成字符串

标红的用的比较多,要重点记

2、string类对象的容量操作

1.size  

 返回字符串有效字符长度;

返回的字符的个数,但是不包括  ‘\0’, 其实string类的结尾是有\0的,因为要兼容C语言,

 2.length

返回字符串有效字符长度,作用和size差不多,但我们经常用size;

3.resize

调整字符串大小

将字符串大小调整为 n 个字符的长度。

如果 n 小于当前字符串长度,则当前值将缩短为其第一个 n 个字符,从而删除第 n个字符之外的字符。

如果 n 大于当前字符串长度,则通过在末尾插入所需数量的字符来扩展当前内容,以达到 n 的大小。如果指定了 c,则新元素将初始化为 c 的副本,否则,它们是值初始化的字符(空字符)。

注意:

当我们要插入字符时,从字符串末尾的位置插入,也就是\0的位置最后一行打印的,末尾其实还有5个\0,我们看不出来,

4.capacity

返回空间总大小

因为字符串可以自动扩容,所以他有个容量接口,但是不同编译器下,扩容的规则不一样,有的是二倍扩容,有的是1.5倍扩容,

5.max_size

字符串的最大长度

max_size是指在当前环境下,可以达到字符串的最大长度;

6.reserve

为字符串预留空间

string s1.reserve(100);

就是为字符串一次性开辟100个字节的空间,比较方便;

7.clear

清空有效字符

清除一个string类的有效字符,但是空间还在,

8.empty

判断字符串是否为空

9.reverse

反转字符串

这个好像涉及到迭代器,比如我们要反转一个字符串

reverse( s1.begin(),s1.end() )

这样写就可以了

3、operator[]以及string类的遍历

string类还重载了[]类型,可以去到字符的下标,和数组类似,

// 1. for+operator[]
	for (size_t i = 0; i < s.size(); ++i)
		cout << s[i] << endl;

	// 2.迭代器
	string::iterator it = s.begin();
	while (it != s.end())
	{
		cout << *it << endl;
		++it;
	}

	// string::reverse_iterator rit = s.rbegin();
	// C++11之后,直接使用auto定义迭代器,让编译器推到迭代器的类型
	auto rit = s.rbegin();
	while (rit != s.rend())
		cout << *rit << endl;

	// 3.范围for
	for (auto ch : s)
		cout << ch << endl;
}

4、string类对象的修改操作

1.operator+=

字符串可以+=一个字符串或者字符或string类

非常好用

2.append

追加字符串

不过平时用的少,我们可以通过一些例子来说明:
 

void test_string3()
{
	std::string str;
	std::string str2 = "Writing ";
	std::string str3 = "print 10 and then 5 more";

	// used in the same order as described above:
	str.append(str2);                       // "Writing "
	str.append(str3, 6, 3);                   // "10 "
	str.append("dots are cool", 5);          // "dots "
	str.append("here: ");                   // "here: "
	str.append(10u, '.');                    // "..........",10u表示10是一个无符号整形
	str.append(str3.begin() + 8, str3.end());  // " and then 5 more"

	std::cout << str << '\n';
}

3.push_back

尾插一个字符,空间不够自动扩容

4.assign

替换当前字符串的值

和append格式一样,但是作用不一样;

// string::assign
#include <iostream>
#include <string>

int main ()
{
  std::string str;
  std::string base="The quick brown fox jumps over a lazy dog.";

  // used in the same order as described above:

  str.assign(base);
  std::cout << str << '\n';

  str.assign(base,10,9);
  std::cout << str << '\n';         // "brown fox"

  str.assign("pangrams are cool",7);
  std::cout << str << '\n';         // "pangram"

  str.assign("c-string");
  std::cout << str << '\n';         // "c-string"

  str.assign(10,'*');
  std::cout << str << '\n';         // "**********"

  str.assign<int>(10,0x2D);
  std::cout << str << '\n';         // "----------"

  str.assign(base.begin()+16,base.end()-12);
  std::cout << str << '\n';         // "fox jumps over"

  return 0;
}

5.insert

在字符串中插入其他字符串

样例: 

// inserting into a string
#include <iostream>
#include <string>

int main ()
{
  std::string str="to be question";
  std::string str2="the ";
  std::string str3="or not to be";
  std::string::iterator it;

  // used in the same order as described above:
  str.insert(6,str2);                 // to be (the )question
  str.insert(6,str3,3,4);             // to be (not )the question
  str.insert(10,"that is cool",8);    // to be not (that is )the question
  str.insert(10,"to be ");            // to be not (to be )that is the question
  str.insert(15,1,':');               // to be not to be(:) that is the question
  it = str.insert(str.begin()+5,','); // to be(,) not to be: that is the question
  str.insert (str.end(),3,'.');       // to be, not to be: that is the question(...)
  str.insert (it+2,str3.begin(),str3.begin()+3); // (or )

  std::cout << str << '\n';
  return 0;
}

6.erase

销毁当前字符串

7.replace

替换 字符串的一部分 

和assign的区别是,assign把整个字符串都替换了,replace可以替换部分字符串

5、string类对象的字符串操作

1.c_str

把string类转化成字符串类型;

2.copy

从字符串中赋值一段字符串,赋值给指定的字符数组

 

// string::copy
#include <iostream>
#include <string>

int main ()
{
  char buffer[20];
  std::string str ("Test string...");
  std::size_t length = str.copy(buffer,6,5);
  buffer[length]='\0';
  std::cout << "buffer contains: " << buffer << '\n';
  return 0;
}

 3.find

在字符串里查找字符或者字符串或者string类

(3)的意思是在字符串中查找s,在pos位置,查找s的n个字符;

4.rfind

倒着查找,其他的和find一样

5.substr

在字符串中从pos位置开始,截取n个字节,然后返回

// string::substr
#include <iostream>
#include <string>

int main ()
{
  std::string str="We think in generalities, but we live in details.";
                                           // (quoting Alfred N. Whitehead)

  std::string str2 = str.substr (3,5);     // "think"

  std::size_t pos = str.find("live");      // position of "live" in str

  std::string str3 = str.substr (pos);     // get from "live" to the end

  std::cout << str2 << ' ' << str3 << '\n';

  return 0;
}

 6.getline

流输入一行字符串

通常我们用的cin输入,遇到空格或者换行就会停止,用getline可以很好的解决这个问题,

#include <iostream>
#include <string>

int main ()
{
  std::string name;

  std::cout << "Please, enter your full name: ";
  std::getline (std::cin,name);
  std::cout << "Hello, " << name << "!\n";

  return 0;
}

 

自己熟悉一下,不如看文档!

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

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

相关文章

强化SSH服务安全的最佳实践

SSH&#xff08;Secure Shell&#xff09;作为一种广泛应用于Linux和其他类Unix系统中的强大工具&#xff0c;为管理员提供了安全的远程登录和命令执行功能。在现今高度互联的网络环境中&#xff0c;确保SSH服务的安全性显得尤为重要。本文将详细阐述一系列SSH服务的最佳实践&a…

稳态视觉诱发电位 (SSVEP) 分类学习系列 (3) :3DCNN

稳态视觉诱发电位分类学习系列:3DCNN 0. 引言1. 主要贡献2. 提出的方法2.1 解码主要步骤2.2 网络具体结构2.3 迁移策略 3. 结果和讨论3.1 数据集1上的结果3.2 数据集2上的结果3.3 零填充 4. 总结欢迎来稿 论文地址&#xff1a;https://www.sciencedirect.com/science/article/a…

优秀博士学位论文分享:动态三维场景理解与重建

优秀博士学位论文代表了各学科领域博士研究生研究成果的最高水平&#xff0c;本公众号近期将推出“优秀博士学位论文分享”系列文章&#xff0c;对人工智能领域2023年优秀博士学位论文进行介绍和分享&#xff0c;方便广大读者了解人工智能领域最前沿的研究进展。 “博士学位论…

基于java+springboot+vue实现的在线考试系统(文末源码+Lw)204

摘 要 使用旧方法对在线考试系统的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在在线考试系统的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发的在线考试…

OpenAI发布GPT-4.0使用指南

大家好&#xff0c;ChatGPT 自诞生以来&#xff0c;凭借划时代的创新&#xff0c;被无数人一举送上生成式 AI 的神坛。在使用时&#xff0c;总是期望它能准确理解我们的意图&#xff0c;却时常发现其回答或创作并非百分之百贴合期待。这种落差可能源于我们对于模型性能的过高期…

百万人都在求的网络安全学习路线,渗透漏洞防御总结(附图)

前言 不折腾的网络安全&#xff0c;和咸鱼有什么区别 目录 二、 前言三 、同源策略 3.1 什么是同源策略 3.2 为什么需要同源策略四 、XSS 4.1 概览 4.2 介绍 4.3 防御五 、CSRF 5.1 概览 5.2 介绍 5.3 防御六、 SQL 注入七 、流量劫持 7.1 DNS 劫持 7.2 HTTP 劫持…

企业微信hook接口协议,ipad协议http,发送小程序

发送小程序 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信send_userid是long要发送的人或群idisRoom是bool是否是群消息 请求示例 {"uuid":"543ed7f3-6ec1-4db8339a140f7","send_userid":788130255…

「生存即赚」链接现实与游戏,打造3T平台生态

当前&#xff0c;在线角色扮演游戏&#xff08;RPG&#xff09;在区块链游戏市场中正迅速崛起&#xff0c;成为新宠。随着区块链技术的不断进步&#xff0c;众多游戏开发者纷纷将其游戏项目引入区块链领域&#xff0c;以利用这一新兴技术实现商业价值的最大化。在这一趋势中&am…

Android如何使用XML自定义属性

1、定义 在res/values文件下定义一个attrs.xml文件&#xff0c;代码如下: 2、使用 在布局中使用&#xff0c; 示例代码如下&#xff1a; 3、获取 最终来到这里&#xff1a;

异常处理Exception(二)

文章目录 1、自定义异常类1、定义消息类2、自定义异常类 2、调用3、测试总结 ABAP预定义的异常类在某些时候并不能精确地描述异常&#xff0c;此时就需要自定义异常类。 1、自定义异常类 1、定义消息类 2、自定义异常类 在Local Types中自定义异常类&#xff0c;当异常触发时…

开箱即用的使用体验!Alibaba Cloud Linux 的演进之旅

随着云计算的发展&#xff0c;越来越多的云上用户对操作系统提出了新的诉求。在 2023 龙蜥操作系统大会阿里云分论坛上&#xff0c;阿里云操作系统团队贾正华分享了 Alibaba Cloud Linux&#xff08;以下简称“Alinux”&#xff09;的发展历程及未来展望&#xff0c;介绍了 Ali…

unittest_parameterized批量测试测试用例

import unittest from parameterized import parameterizeddef add(x, y):return xy"""问题&#xff1a;如果有三组数据需要测试&#xff1f;[(1,1,2), (1,2,3), (0,3,3)] """def get_data():return [(1, 2, 3), (3, 0, 3), (2, 1, 3)]# 定义测试…

第3篇:创建Nios II工程之Hello_World<二>

Q&#xff1a;上一期介绍完基本设计流程和实验原理&#xff0c;接着我们完成系统硬件设计部分&#xff0c;包括Platform Designer系统及Quartus工程。 A&#xff1a;依次搜索并添加Nios II Processor、JTAG UART、On-Chip Memory和System ID IP组件&#xff0c;连接各组件并As…

C#窗体控件ColorDialog

介绍 可以获取颜色&#xff0c;然后对其他控件的颜色属性进行设置。 构造方式 直接把ColorDialog控件拖动到Form窗口。 常用属性 AllowFullOpen 可以控制是否使用自定义颜色&#xff0c;true表示可使用&#xff0c;否&#xff0c;表示不可使用。 AnyColor 如果为tr…

Leetcode—682. 棒球比赛【简单】(stoi函数、accumulate函数)

2024每日刷题&#xff08;120&#xff09; Leetcode—682. 棒球比赛 实现代码 class Solution { public:int calPoints(vector<string>& operations) {vector<int> v;for(const string& oper: operations) {if(oper "") {v.push_back(v.back(…

渗透新思路 | 仿真环境下内存转储分析和模糊测试的全记录

本文由安全研究人员hugsy于2024年03月26日更新并发表于blahcat博客上&#xff0c;本文主要记录了其在进行内存安全和模糊测试任务时发现的一些技术实现方式&#xff0c;主要讨论的是仿真环境下内存转储分析和模糊测试方法。本文旨在为红队和蓝队研究人员提供新的思路&#xff0…

数字化技术可以促进中国企业创新吗?

数字化技术可以显著促进中国企业的创新。数字化技术&#xff0c;包括人工智能&#xff08;AI&#xff09;、区块链&#xff08;Blockchain&#xff09;、云计算&#xff08;Cloud computing&#xff09;、大数据&#xff08;big Data&#xff09;等&#xff0c;被称为ABCD技术&…

TruLens

文章目录 一、关于 TruLensHow it works 二、安装三、快速使用Get DataInCreate Vector StoreBuild RAG from scratchSet up feedback functions.Construct the appRun the app 一、关于 TruLens Evaluate and Track LLM Applications 官网&#xff1a;https://www.trulens.o…

【Redis 开发】详细搭建Redis主从,并了解数据同步原理

Redis主从搭建 Redis主从搭建Redis的主从架构数据全同步原理数据的增量同步优化Redis主从集群 Redis主从 搭建Redis的主从架构 主从节点可以实现读写分离&#xff0c;将都大量的读操作分担与诸多从节点当中去 从节点可以叫做slave或者replica 如何搭建&#xff1a; 在一台…

node 项目启动报 ERROR Failed to compile with 1 errors 错误

问题 node项目通过npm run dev启动时出现ERROR Failed to compile with 1 errors 错误&#xff0c;具体信息如下&#xff1a; ✖ WebpackCompiled with some errors in 366.81msERROR Failed to compile with 1 errors …
最新文章