当前位置: 首页 > news >正文

【C++】对于string的补充(成员函数c_str()、大小写转换、字符串和实数之间的相互转换)

前言

本篇文章记录的是一些关于string的补充说明

string与const char*之间的相互转换

const char* 转换成string

在C++中存在着从const char到string的隐式类型转换,换句话说,如果一个函数的参数类型是string类,直接传入const char类型的参数是没问题的

const char* cstr = "demo";
string str(cstr);

string与const char*的转换

在传入参数时i,有时我们传入string在编译时是会报错的,所以我们就需要传入const char* 类型

我们可以使用成员函数c_str(),来返回string对应的char数组

string str = "demo";
const char* cstr = str.c_str();

并且,在进行文件读写的时候,使用const char* 比使用string更安全
因为,string是会自动分配内存的,其内部的存储方式是不可见的
而const char*类型是整存整取的,或者也可以自己手动存入每一部分

注意

为了修改string字符串的内容,下标访问操作符[]和函数at都会返回字符串中某个字符的引用,但当字符串的内存被重新分配之后,可能会发生错误

此处给出一个例子(string内部的内存分配机制)方便理解:
字符串str中有十个元素,当我想往里面复制11个元素时,先复制了10个元素,在放第十一个元素的时候,原字符串不够放,那就会在堆区的另一个地方找一个更大的位置,比如找了一个能存放20个元素的位置,
首先,会之前存储的10个元素拷贝到新的空间里,之后再将第11个元素存储到后面,最后将之前存储10个元素的空间释放掉

那么,当我想通过之前的引用找到原来对应的字符时,就会发生未知的错误

大小写转换

在C语言中,我们只能通过循环来改变每个字符,利用ASCII码值或者toupper/tolower函数将其转换成大写或小写

而使用STL的话,一行就能解决这个问题
在STL算法库中,已经将这种遍历修改的过程进行了封装
我们可以直接复用:

transform(str.begin, str.end(), str.begin(), toupper);
//字符串转大写transform(str.begin(), str.end(), str.begin(), tolower);
//字符串转小写

这里面的算法就是transform算法,包含四个参数
前两个参数是源容器的首未迭代器
第三个参数是目标容器的首迭代器
第四个参数是函数指针,也就是要执行的操作

之后会有对于迭代器的解释和学习,在这里会用就行

字符串和数字之间的转换

实数转字符串

在C++11新标准中,提供了全局函数std::to_string
可以将类型转换成string类型

下面给出一些例子
将带符号 / 不带符号整数和实数转换成字符串

string to_string(int val);string to_string(long val);string to_string(long long val);string to_string(unsigned int val);string to_string(unsigned long val);string to_string(unsigned long long val);string to_string(float val);string to_string(double val);string to_string(long double val);

字符串转实数

int stoi(const string& str, size_t* idx = 0; int base = 10);long stol(const string& str, size_t* idx = 0, int base = 10);long long stoll(const string& str, size_t* idx = 0, int base = 10);

补充说明

1.

idx返回字符串中第一个非数字的位置,即数值部分的结束位置

2.

base为进制,10就是10进制,8就是8进制

3.

该组函数会自动保留符号和自动去除前导0

C风格字符数组转换成实数

在C语言中,也提供了一些函数来帮助我们将字符数组转换成实数

int atoi(const char* str);long atol(const char* str);long longstoll(const char* str);double atof(const char* str);

注意:
atof函数中的f指的是浮点数(包含float、double、long double类型),atof函数的返回类型是double

结语

关于string的补充说明到这里就结束了,
之后我会出一些刷题的笔记以及C++相关知识的学习和介绍

我们下篇文章见~

相关文章:

【C++】对于string的补充(成员函数c_str()、大小写转换、字符串和实数之间的相互转换)

前言 本篇文章记录的是一些关于string的补充说明 string与const char*之间的相互转换 const char* 转换成string 在C中存在着从const char到string的隐式类型转换,换句话说,如果一个函数的参数类型是string类,直接传入const char类型的参…...

华为OD机试真题【羊狼农夫过河】

1、题目描述 【羊、狼、农夫过河】 羊、狼、农夫都在岸边,当羊的数量小于狼的数量时,狼会攻击羊,农夫则会损失羊。农夫有一艘容量固定的船,能够承载固定数量的动物。要求求出不损失羊情况下将全部羊和狼运到对岸需要的最小次数。…...

【线性代数-3Blue1Brown】- 5 三维空间的线性变换

飞书原文档:Docs...

Maven入门教程(二):idea/Eclipse使用Maven

Maven入门教程(一):安装Maven环境 4.开发工具配置 4.1 idea配置 idea有多个版本,配置是一样的,只是配置页面的入口不一样 旧版idea 新版idea 4.2 Eclipse配置 打开Eclipse,菜单中选择:Window -> Preference ->…...

【MySQL】MySQL里的用户账户和角色是什么?如何管理?

用户(user)验证和授权创建用户账户连接服务器查看用户账户设置 角色(role)创建角色 操作用户帐户和角色重命名删除 感谢 💖 用户(user) 在MySQL中,用户是数据库访问的主要实体。每个…...

vbs病毒

vbs脚本:VBS脚本病毒原理分析和防范 疯狂代码 http://CrazyCoder.cn/ Sh t t p : / C r a z y C o d e r . c n / S e c u r i t y / Ar t i c l e 7 2 0 0 8 . h t m l 网络流行让我们世界变得更加美好但它也有让人不愉快时候当您收到封主题为1LoveYou” 邮件用兴奋 得几乎快发…...

用Java实现Huffman编码

文章目录 前言一、实现思路二、准备Huffman结点三、主要实现 前言 在使用http1.1协议传输数据的时候,会有一些固定的字段,比如cookie、编码方式、接收的数据类型,另外会有一些大量重复的字段造成请求报文过于冗长,为了解决这个问…...

day-04 基于UDP的服务器端/客户端

一.理解UDP (一)UDP套接字的特点 UDP套接字具有以下特点: 无连接性:UDP是一种无连接的协议,这意味着在发送数据之前,不需要在发送方和接收方之间建立连接。每个UDP数据包都是独立的,它们可以独…...

FFmpeg rtp rtp_mpegts的区别

rtp 在FFmpeg中,rtpenc是一个用于将音视频数据封装成RTP(Real-time Transport Protocol)数据包并发送到网络上的编码器。RTP是一种用于实时传输音视频数据的协议,常用于视频会议、流媒体等场景。 rtpenc可以将音视频数据封装成R…...

【链表OJ】相交链表 环形链表1

前言: 💥🎈个人主页:​​​​​​Dream_Chaser~ 🎈💥 ✨✨刷题专栏:http://t.csdn.cn/UlvTc ⛳⛳本篇内容:力扣上链表OJ题目 目录 一.leetcode 160. 相交链表 1.问题描述: 2.解题思路: 二.leetcode 141.环形链表 …...

DevOps之自动化测试

什么是自动化测试? 明确一下自动化测试不是什么。自动化测试不是指自动化生成测试代码,而是自动化地执行由开发人员或测试人员编写的测试代码。正如下面这句谚语:“绝不要手工去做任何可以被自动化处理的事情。——Curt Hibbs” 之前是由人…...

Java 程序打印 OpenCV 的版本

我们可以使用 Java 程序来使用 OpenCV。 OpenCV 的使用需要动态库的加载才可以。 加载动态库 到 OpenCV 的官方网站上下载最新的发布版本。 Windows 下载的是一个可执行文件,没关系,这个可执行文件是一个自解压程序。 当你运行以后会提示你进行解压。…...

ChatGPT⼊门到精通(2):ChatGPT 能为我们做什么

⼀、雇佣免费的⼲活⼩弟 有了ChatGPT后,就好⽐你有了好⼏个帮你免费打⼯的「⼩弟」,他们可以帮你做很多 ⼯作。我简单总结⼀些我⽬前使⽤过的⽐较好的基于ChatGPT的服务和应⽤。 1、总结、分析 当我们在阅读⼀些⽂章和新闻的时候,有的⽂章写…...

线程和进程的区别是什么?

线程(Thread)和进程(Process)是操作系统中两个重要的概念,用于管理程序的执行。它们有以下区别: 定义:进程:进程是程序的一个执行实例,它包含了程序的代码、数据以及执行上下文。进程是操作系统分配资源和调度的基本单位。线程:线程是进程的子执行单元,一个进程可以…...

力扣27.移除元素

27. 移除元素 提示 简单 1.9K 相关企业 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序…...

指针(个人学习笔记黑马学习)

1、指针的定义和使用 #include <iostream> using namespace std;int main() {int a 10;int* p;p &a;cout << "a的地址为&#xff1a;" << &a << endl;cout << "a的地址为&#xff1a;" << p << endl;…...

vue 路由动态加载

在 Vue.js 中&#xff0c;可以使用 webpack 的动态导入语法来实现路由动态加载。下面是一个简单的示例&#xff1a; const Home () > import(/* webpackChunkName: "home" */ ./views/Home.vue); const About () > import(/* webpackChunkName: "about…...

电脑识别不了固态硬盘怎么办?

在使用固态硬盘时&#xff0c;可能会出现电脑无法识别的情况&#xff0c;这时我们就无法使用固态硬盘中的数据。那么&#xff0c;电脑识别不了固态硬盘怎么办&#xff1f; 为什么电脑识别不了固态硬盘&#xff1f; 一般来说&#xff0c;电脑识别不了固态硬盘是因为以下3个原因…...

QCustomPlot 绘制卡顿问题

大数据量导致曲线绘制卡顿问题 这里提供一个思路在跟踪源码中发现底层卡顿在vector的resize() 此处扩容中 所以尽量使用下面的接口 /*! \overloadAdds the provided data point as \a key and \a value to the current data.Alternatively, you can also access and modify t…...

uni-app开发小程序,radio单选按钮,点击可以选中,再次点击可以取消

一、实现效果&#xff1a; 二、代码实现&#xff1a; 不适用官方的change方法&#xff0c;自己定义点击方法。 动态判断定义的值是否等于遍历的值进行回显&#xff0c;如果和上一次点击的值一样&#xff0c;就把定义的值改为null <template><view><radio-group&…...

mpv.net 高效配置实战:从媒体播放到专业调优的进阶指南

mpv.net 高效配置实战&#xff1a;从媒体播放到专业调优的进阶指南 【免费下载链接】mpv.net &#x1f39e; mpv.net is a media player for Windows with a modern GUI. 项目地址: https://gitcode.com/gh_mirrors/mp/mpv.net 作为一款基于mpv核心的现代化Windows媒体播…...

Fastboot Enhance:Windows平台Android设备管理的终极图形化解决方案

Fastboot Enhance&#xff1a;Windows平台Android设备管理的终极图形化解决方案 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance Fastboot Enhance…...

5分钟极速上手:B站视频转文字工具bili2text完整指南

5分钟极速上手&#xff1a;B站视频转文字工具bili2text完整指南 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为整理B站视频内容而烦恼吗&#xff1f;每…...

ViGEmBus虚拟游戏控制器驱动:从入门到精通的完整指南

ViGEmBus虚拟游戏控制器驱动&#xff1a;从入门到精通的完整指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是Windows系统上强大的虚拟游戏控制…...

基于STM32的智能空调控制器设计:从环境感知到PID控制

1. 项目概述&#xff1a;从传统遥控到智能感知的跨越几年前&#xff0c;我还在为一个老旧的壁挂式空调发愁。每次回家&#xff0c;都得在闷热的房间里摸索遥控器&#xff0c;或者忍受着固定风向的直吹。后来接触了智能家居&#xff0c;发现市面上的智能空调要么价格昂贵&#x…...

电池级氢氧化锂粉碎设备选型指南:氮气保护气流粉碎机详解

氢氧化锂&#xff08;LiOH&#xff09;具有易吸潮、强碱性、有一定粘附性的特点&#xff0c;且在电池级应用中对金属杂质污染零容忍。因此&#xff0c;行业主流不推荐传统的机械碾压式磨机&#xff08;如雷蒙磨&#xff0c;容易引入铁屑且密封难&#xff09;&#xff0c;而是首…...

别再只会用vi了!openEuler 20.03 LTS下保姆级安装vim教程(附yum源配置)

从零配置到高效编辑&#xff1a;openEuler系统vim全攻略 刚接触openEuler系统的开发者常会遇到一个尴尬场景&#xff1a;习惯性输入vim命令后&#xff0c;终端却冷冷地回应"command not found"。这个看似简单的问题背后&#xff0c;其实涉及Linux发行版的软件管理机制…...

美团春招笔试“小美的朋友关系”全网无AC?我用逆向并查集搞定它(附完整代码)

逆向并查集&#xff1a;破解美团笔试"小美的朋友关系"难题 大厂算法笔试中&#xff0c;总有一两道题能卡住绝大多数求职者。今年美团春招的"小美的朋友关系"就是这样一道"拦路虎"——全网找不到AC代码&#xff0c;无数人在超时和错误答案中挣扎。…...

Redis——string类型相关指令

添加键值对SET [key] [value] [EX seconds|PX milliseconds] [NX|XX] //添加一个键值对SETNX [key] [value] //setNX的组合命令&#xff0c;不支持EX/PX选项SETEX [key] [value] //setEX的组合命令&#xff0c;不支持NX/XX选项PSETEX [key] [value] //setPX的组合命令&#xff…...

OpenISP 模块拆解 · 第7讲:去马赛克 (CFA)

OpenISP 模块拆解 第7讲&#xff1a;去马赛克 (CFA) 模块作用 CFA 插值也叫 demosaic&#xff0c;是把单通道 Bayer RAW 转成三通道 RGB 的关键模块。每个传感器像素只采集 R/G/B 之一&#xff0c;CFA 要为每个位置估计缺失的两个颜色通道。 openISP 实现 源码类名为 CFA(img,…...