C++ 标准库string

常用函数
函数名说明
at 、[]获取单个字符
append追加字符串
insert插入字符串
length、size字符长度
empty返回布尔值,判断是否字符串为空
capacity字符串容量
reserve预分配内存,至少保证能容纳n个字符而不必重新分配
find字符串查找
replace字符串替换
resize改变字符串大小,可选填充值初始化新空间。
substr获取子字符串
std::string::npos

std::string::npos是C++标准库中std::string类的一个静态成员常量,其值通常被定义为std::size_t类型的最大值。这个特殊值常用于表示没有找到所查找的子串,或者表示一个超出字符串长度的有效索引位置。

示例:

std::string str = "Hello, world!";
size_t found = str.find("world");
if (found != std::string::npos) {std::cout << "找到子串 'world' 在位置: " << found << std::endl;
} else {std::cout << "没有找到子串 'world'" << std::endl;
}

示例1:

string str="abc";
// 设置字符串的预留容量为100个字符
str.reserve(100);//如果预先知道str会增长到一定程序,可以先预留容量
//避免内存多次分配,提高效率,当str长度超过100时,会自动扩容
std::cout<<str.capacity()<<std::endl;

示例2:

string str="abc";
//字符串长度
std::cout<<str.length()<<std::endl;
//下标超过不会报错
std::cout<<"取单个字符:"<<str[10]<<endl;
//超过会报错
std::cout<<"取单个字符:"<<str.at(1)<<endl;
//遍历
int abc=str.length();
for(int i =0;i < abc;i++){std::cout<<str[i]<<std::endl;
}
//第二种
for(char &i :str){std::cout<<i<<std::endl;
}

示例3:

#include <iostream>
#include <string>
using namespace std;//字符串替换,利用 string 的replace 方法和 find 方法,重新实现了一个函数,方便字符串的替换
std::string replace(std::string str, const std::string& from, const std::string& to, size_t maxReplacements = std::string::npos) {size_t startPos = 0;size_t replacementsDone = 0;// 主循环:只要能找到"from"子串并且没有超过最大替换次数while ((startPos = str.find(from, startPos)) != std::string::npos) {if (maxReplacements != std::string::npos && replacementsDone >= maxReplacements) {break;  // 达到最大替换次数,退出循环}str.replace(startPos, from.length(), to);// 移动到替换后的位置,避免在新插入的子串中再次查找startPos += to.length();++replacementsDone;}return str;
}
int main()
{std::string str = "aaa bbb ccc";std::cout<<replace(str,"b","x",1)<<std::endl;std::cout<<replace(str,"b","x")<<std::endl;std::cout<<replace(str,"b","xx")<<std::endl;return 0;
}
分割字符串
#include <iostream>
#include <string>
#include <vector>
using namespace std;std::vector<std::string> split(const std::string& s, std::string delimiter) {std::vector<std::string> tokens;size_t start = 0;size_t end = s.find(delimiter);while (end != std::string::npos) {tokens.push_back(s.substr(start, end - start));start = end + delimiter.length();end = s.find(delimiter, start);}tokens.push_back(s.substr(start, end)); // 添加最后一个子串return tokens;
}int main()
{std::string str = "aaa;bbb;ccc";auto res= split(str,";");for (const auto& val : res) {std::cout << val << std::endl;}return 0;
}
类型转换
  • std::stoi 字符串转整数, 可以 翻译成 string to int
  • std::stof 字符串转float, 可以 翻译成 string to float
  • std::stod 字符串转double, 可以 翻译成 string to double
  • std::to_string 将其他数据类型转成string
  • 转换的时候,需要捕获异常,因为容易转换失败

string转int

#include <string>
#include <iostream>
using namespace std;int main()
{string strNum = "123.12";try {int num = std::stoi(strNum);std::cout << "转换后的整数为:" << num << std::endl;} catch (const std::invalid_argument& e) {std::cerr << "无法转换为整数: " << e.what() << std::endl;} catch (const std::out_of_range& e) {std::cerr << "超出整数范围: " << e.what() << std::endl;}return 0;
}

int、float、double转string

#include <string>
using namespace std;
int main()
{ int num = 123;float f=12.3;double a=123.222;std::string strNum1 = std::to_string(num);std::string strNum2 = std::to_string(f);std::string strNum3 = std::to_string(a);return 0;
}

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

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

相关文章

论文阅读KAN: Kolmogorov–Arnold Networks

学习了最近大热的KAN网络 论文地址&#xff1a;https://arxiv.org/pdf/2404.19756 按我个人读论文的习惯总结了如下几点&#xff1a; 1&#xff0c;背景&#xff1a; 1&#xff09;灵感来源&#xff1a;于Kolmogorov-Arnold表示定理&#xff0c;也就是多变量连续函数可以表…

【html】网页设计语言制作竟然是文科?

网页设计与制作可能偏文科&#xff0c;并认为它相对于其他编程语言来说更容易理解&#xff0c;这是一个很有意思的观点。实际上&#xff0c;HTML&#xff08;超文本标记语言&#xff09;作为网页设计与制作的基础&#xff0c;确实具有一些特点&#xff0c;使其在某种程度上更易…

【JavaScript脚本宇宙】创造声音的魔法:深入了解Web音频处理库

聆听创意可能性&#xff1a;解锁Web音频库的神奇功能 前言 在Web开发中&#xff0c;处理音频是一个重要且常见的需求。许多JavaScript库和框架旨在简化音频处理和交互式音乐的创建过程。本文将探讨几个流行的Web音频库&#xff0c;介绍它们的概述、主要特性、使用示例以及适用…

【人工智能】第七部分:ChatGPT的未来展望

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

Java基础 - 异常处理

异常处理 异常处理用于处理程序执行过程中可能出现的错误或异常情况。 检查性异常&#xff1a; 这类异常通常使用 try-catch 块来捕获并处理异常&#xff0c;或者在方法声明中使用 throws 子句声明方法可能抛出的异常。 运行时异常&#xff1a; 这些异常在编译时不强制要求…

LeetCode | 1624.两个相同字符之间的最长子字符串

这道题拿到手想法就是去双重遍历暴力解&#xff0c;对于每个字符&#xff0c;从后往前遍历字符串&#xff0c;找到从后往前一直到本次遍历的这个字符串这段子串中和这个字符串相同的字符位置&#xff0c;然后得到子字符串的长度&#xff0c;和ans存储的值做一个比较&#xff0c…

副业赚钱:10个简单创意,轻松实现财务自由

嗨&#xff0c;我是兰若姐姐&#xff0c;我是从4月26号开始日更博客的&#xff0c;之前一直分享的是技术文档&#xff0c;但是在这个过程中&#xff0c;我发现这些文档只是解决了某一个人当下遇到的某个具体问题&#xff0c;但是对于他升值加薪没有任何帮助&#xff0c;所以我中…

GameDriver XR测试自动化工具概述

GameDriver XR是一个测试自动化工具&#xff0c;它主要用于扩展和自动化跨现实&#xff08;Extended Reality&#xff0c;简称XR&#xff09;应用的测试。XR是一个总括性术语&#xff0c;包括增强现实&#xff08;AR&#xff09;、虚拟现实&#xff08;VR&#xff09;和混合现实…

Linux入门学习(2)

1.相关复习新的指令学习 &#xff08;1&#xff09;我们需要自己创建一个用户&#xff0c;这个用户前期可以是一个root用户&#xff0c;后期使用创建的普通用户 &#xff08;2&#xff09;文件等于文件内容加上文件属性,对于文件的操作就包括对于文件内容的操作和文件属性&…

论文Compiler Technologies in Deep Learning Co-Design: A Survey分享

目录 标题摘要引言背景深度学习软件和硬件的发展不同时期的协同设计深度学习协同设计系统神经网络架构设计和优化协同设计技术 用于协同设计的深度学习系统中的编译技术深度学习编译器TVM 生态系统和MLIR生态系统IR转换和优化代码生成运行时和执行模式 Buddy-Compiler: 一个针对…

如何在 iPhone 上恢复已删除的短信

本文介绍如何检索已删除的短信和 iMessage 以及恢复丢失的消息。说明适用于 iOS 17 及更高版本。 如何在 iOS 17及更高版本中恢复文本 恢复已删除短信的最简单方法是使用 iOS 17。从删除短信到恢复它有 30 到 40 天的时间。 在“信息”的对话屏幕中&#xff0c;选择“过滤器”…

梯度提升决策树(GBDT)

GBDT&#xff08;Gradient Boosting Decision Tree&#xff09;&#xff0c;全名叫梯度提升决策树&#xff0c;是一种迭代的决策树算法&#xff0c;又叫 MART&#xff08;Multiple Additive Regression Tree&#xff09;&#xff0c;它通过构造一组弱的学习器&#xff08;树&am…

Valgo,类型安全,表达能⼒强的go验证器

valgo 是一个为 Go 语言设计的类型安全、表达性强且可扩展的验证库。该库的特点包括&#xff1a; github.com/cohesivestack/valgo 类型安全&#xff1a;利用 Go 语言的泛型特性&#xff08;从 Go 1.18 版本开始支持&#xff09;&#xff0c;确保验证逻辑的类型安全。表达性&a…

input 的 name 属性的作用?

在HTML中&#xff0c;input元素用于创建可以与用户交互的表单控件。其中&#xff0c;name属性用于定义表单字段的名称&#xff0c;也就是对应字段的标识符。 name属性的作用如下&#xff1a; 表单提交&#xff1a;当用户填写表单并提交时&#xff0c;name属性指定的字段名称将…

Python与其他编程语言(如Java、C++)相比有哪些优势?

一、技术难点 在探讨Python与其他编程语言相比的优势时&#xff0c;技术难点在于如何全面、准确地把握并阐述这些优势。这需要对Python、Java、C等编程语言有深入的理解&#xff0c;包括它们的语法特性、应用领域、性能特点、开发效率等。 首先&#xff0c;Python的语法简洁明…

关于Stream.toList()方法使用小记

对照示例 public static void main(String[] args) {final List<String> list new ArrayList<>();list.add("aa");list.add("bb");list.add("cc");list.remove("cc");System.out.println(list);}结果&#xff1a; Stre…

【谣传】不能完全取代HR

https://arxiv.org/pdf/2405.18113 这份研究论文提出了 MockLLM&#xff0c;一个利用大型语言模型&#xff08;LLM&#xff09;角色扮演能力来促进招聘场景中人和职位匹配的框架。它通过模拟面试过程来生成额外的匹配证据&#xff0c;从而提高匹配的准确性。 主要问题和挑战&am…

《Python程序设计》

python编程题 给定一个年份,判断这一年是不是闰年。def is_leap_year(year): if year % 4 != 0: return False elif year % 100 != 0: return True elif year % 400 != 0: return False else: return True # 测试函数 year = int(input("请输入一个年份: &quo…

使用python绘制季节图

使用python绘制季节图 季节图效果代码 季节图 季节图&#xff08;Seasonal Plot&#xff09;是一种数据可视化图表&#xff0c;用于展示时间序列数据的季节性变化。它通过将每个时间段&#xff08;如每个月、每个季度&#xff09;的数据绘制在同一张图表上&#xff0c;使得不同…

移动安全赋能化工能源行业智慧转型

随着我国能源化工企业的不断发展&#xff0c;化工厂中经常存在火灾爆炸的危险&#xff0c;特别是生产场所&#xff0c;约有80%以上生产场所区域存在爆炸性物质。而目前我国化工危险场所移动通信设备的普及率高&#xff0c;但是对移动通信设备的安全防护却有所忽视&#xff0c;包…