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

【BOOST程序库】对字符串的处理

基本概念这里不解释了,代码中详细解释了BOOST程序库中对于字符串每一个方法的详细用法:

注意:这里每实践一个方法,都将上面实践过的方法进行了注释,如果全部取消注释,会出现重命名的问题。

#include <iostream>
#include <string>//boost类型转换头文件
#include <boost/lexical_cast.hpp>
//boost格式化字符头文件
#include <boost/format.hpp>
//boost轻量化字符串头文件
#include <boost/utility/string_ref.hpp>
//字符串算法头文件
#include <boost/algorithm/string.hpp>int main() {/*//C++自带的字符串转换:int ivalue = std::stoi("42");int lvalue = std::stol("122");long long llvalue = std::stoll("42222");double dbvalue = std::stod("42.222");std::string szStr = std::to_string(12138);std::cout << typeid(ivalue).name() << "\t" << typeid(lvalue).name() << "\t" << typeid(llvalue).name() << "\t" << typeid(dbvalue).name() << "\t" << typeid(szStr).name() << std::endl;std::cout << ivalue << "\t" << lvalue << "\t" << llvalue << "\t" << dbvalue << "\t" << szStr << std::endl;//输出:int     int     __int64 double  class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >//42      122     42222   42.222  12138//boost程序库的转换:int nValue = boost::lexical_cast<int> ("123");long lValue = boost::lexical_cast<long>("123456");long long llValue = boost::lexical_cast<long long>("123456789");double dbValue = boost::lexical_cast<double> ("12.123456");bool bValue = boost::lexical_cast<bool> ("1");std::string Str = boost::lexical_cast<std::string> (123456789);std::cout << typeid(nValue).name() << "\t" << typeid(lValue).name() << "\t" << typeid(llValue).name() << "\t" << typeid(dbValue).name() << "\t" << typeid(bValue).name() << "\t" << typeid(Str).name() << std::endl;std::cout << nValue << "\t" << lValue << "\t" << llValue << "\t" << dbValue << "\t" << bValue << "\t" << Str << std::endl;//输出:int     long    __int64 double  class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >//123     123456  123456789       42.222  123456789//使用bosot转换的时候,如果转化失败,会抛出异常:try {int nValue = boost::lexical_cast<int> ("123");long lValue = boost::lexical_cast<long>("123456");long long llValue = boost::lexical_cast<long long>("123456789");double dbValue = boost::lexical_cast<double> ("12.123456");bool bValue = boost::lexical_cast<bool> ("123");std::string Str = boost::lexical_cast<std::string> (123456789);std::cout << typeid(nValue).name() << "\t" << typeid(lValue).name() << "\t" << typeid(llValue).name() << "\t" << typeid(dbValue).name() << "\t" << typeid(bValue).name() << "\t" << typeid(Str).name() << std::endl;std::cout << nValue << "\t" << lValue << "\t" << llValue << "\t" << dbValue << "\t" << bValue << "\t" << Str << std::endl;}catch (boost::bad_lexical_cast &e) {std::cout << "error" << "\t" << e.what() << std::endl;}//输出:error   bad lexical cast: source type value could not be interpreted as target//也可以使用不抛出异常的方式,使用返回的bool来判断是否转换成功:int nNum;boost::conversion::try_lexical_convert(123456, nNum);std::cout << nNum << std::endl;boost::format fmt("%s-%d-%d-%d");std::cout << fmt % "fdjskalf;djska" % 2023 % 05 % 24<<std::endl;//输出:fdjskalf;djska-2023-5-24//也可以使用匿名对象的方式:std::cout << boost::format("%s-%d-%d-%d") % "format" % 2023 % 05 % 31 << std::endl;//输出:format-2023-5-31//实际上,底层进行了二次封装:basic_formatboost::basic_format<char> bfmt("%s-%d-%d-%d");std::cout << bfmt % "bfmit" % 222 % 111 % 000 << std::endl;//输出:bfmit-222-111-0//boost中的轻量化字符串://C++本身在进行字符串的操作的时候,会有一定的成本问题:比如说:const char* str = "This is a string";std::string Str(str);  //在这个过程中,存在一次string类的深拷贝过程//使用boost轻量化字符串:也可以使用=赋值的方法(注意这里是字符串的引用,所以不能修改原值boost::string_ref S1(str);boost::string_ref S2(Str);std::cout << S1 << "\t" << S2 << std::endl;     //输出:This is a string        This is a string//可以指定字符个数:boost::string_ref S3(str, 4);std::cout << S3 << std::endl;                //输出:This//字符串的判断:if (S3==S1.substr(0,4)) {std::cout << "==" << std::endl;}//可以在任意位置取出字符:std::cout << S1.front() << std::endl;     //Tstd::cout << S1.at(2) << std::endl;       //istd::cout << S1.back() << std::endl;      //g//含有迭代器:for (auto i = S1.begin(); i != S1.end(); i++) {std::cout << *i;}//This is a stringstd::cout << std::endl;//字符串的比对:这个方法,如同strcmp wcscmp返回0代表比对成功std::cout << S1.compare(S2) << std::endl;//可以取出原始字符串:const char* p = S1.data();std::cout << p << std::endl;       //This is a string//查找是否存在字串:auto a = S1.find("is");std::cout << typeid(S1.find("is")).name() << std::endl;      //unsigned intstd::cout << a << std::endl;        //返回第一次出现的位置//对字符串的判断/等操作,头文件:boost/algorithm/string.hppstd::string Str = "readmi.txt";//判断文件格式,也就是判断字符串尾:if (boost::ends_with(Str, ".txt")) {std::cout << "txt文件" << std::endl;}//判断头部:if (boost::starts_with(Str, "rea")) {std::cout << "rea" << std::endl;}//判断一个字符是否包含另一个字符串:if (boost::contains(Str, "read")) {std::cout << "contains" << std::endl;}//对字符串进行大小写转换:boost::to_upper(Str);std::cout << Str << std::endl;      //READMI.TXTboost::to_lower(Str);std::cout << Str << std::endl;      //readmi.txt//替换字符:replace_first:替换第一次出现的/replace_last:替换最后一次出现的/replace_all:替换所有std::string Str = "readmeread.txt";//boost::replace_first(Str, "read", "MMMM");//std::cout << Str << std::endl;       //MMMMmeread.txt//boost::replace_last(Str, "read", "MMMM");//std::cout << Str << std::endl;       //readmeMMMM.txtboost::replace_all(Str, "read", "MMMM");std::cout << Str << std::endl;         //MMMMmeMMMM.txt//空格删除://1. 删除所有空格:std::string Str = "     abcde     ";//boost::trim(Str);std::cout << Str << std::endl;       //abcde//2. 删除左边的空格://boost::trim_left(Str);               //abcde     astd::cout << Str << "a" << std::endl;//3. 删除右边的空格:boost::trim_right(Str);std::cout << Str << "a" << std::endl;   //abcdea*///字符串的查找:std::string Str = "readreadreadmereadreadread.txt";std::cout << typeid(boost::find_first(Str, "read")).name() << std::endl;     //返回值类型:class boost::iterator_range<class std::_String_iterator<class std::_String_val<struct std::_Simple_types<char> > >auto a = boost::find_first(Str, "read");std::cout << a << std::endl;                               //read//boost::find_last方法:取出最后出现的//从字符串中取出字符://取出头部6字节:auto head = boost::find_head(Str, 6);std::cout << typeid(boost::find_head(Str, 6)).name() << std::endl;     //class boost::iterator_range<class std::_String_iterator<class std::_String_val<struct std::_Simple_types<char> > > >std::cout << head << std::endl;    //readre//取出尾部6字节:auto tail = boost::find_tail(Str, 6);std::cout << typeid(boost::find_tail(Str, 6)).name() << std::endl;     //class boost::iterator_range<class std::_String_iterator<class std::_String_val<struct std::_Simple_types<char> > > >std::cout << tail << std::endl;    //ad.txtreturn 0;
}

如果发现文章中有错误,还请大家指出来,我会非常虚心地学习,我们一起进步!!!

相关文章:

【BOOST程序库】对字符串的处理

基本概念这里不解释了&#xff0c;代码中详细解释了BOOST程序库中对于字符串每一个方法的详细用法&#xff1a; 注意&#xff1a;这里每实践一个方法&#xff0c;都将上面实践过的方法进行了注释&#xff0c;如果全部取消注释&#xff0c;会出现重命名的问题。 #include <…...

(学习笔记-内存管理)虚拟内存

单片机是没有操作系统的&#xff0c;每次写完代码&#xff0c;都需要借助工具把程序烧录进去&#xff0c;这样程序才能跑起来。另外&#xff0c;单片机的CPU是直接操作内存的[物理地址]。 在这种情况下&#xff0c;要想在内存中同时运行两个程序是不可能的。如果第一个程序在 2…...

JVM理论(七)性能监控与调优

概述 性能优化的步骤 性能监控&#xff1a;就是通过以非强行或入侵方式收集或查看应用程序运行状态,包括如下问题 GC频繁CPU过载过高OOM内存泄漏死锁程序响应时间较长性能分析&#xff1a;通常在系统测试环境或者开发环境进行分析 通过查看程序日志以及GC日志,或者运用命令行工…...

复现YOLOv8改进最新MPDIoU:有效和准确的边界盒回归的损失,打败G/E/CIoU,效果明显!!!

MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression 论文简介MPDIoU核心设计思路论文方法实验部分加入YOLOv5代码论文地址:https://arxiv.org/pdf/2307.07662.pdf 论文简介 边界盒回归(Bounding box regression, BBR)广泛应用于目标检测和实例分割,是目标…...

LT6911C 是一款HDMI 1.4到双端口MIPIDSI/CSI或者LVDS加音频的一款高性能芯片

LT6911C 1.描述&#xff1a; LT6911C是一款高性能的HDMI1.4到MIPIDSI/CSI/LVDS芯片&#xff0c;用于VR/智能手机/显示器应用程序。对于MIPIDSI/CSI输出&#xff0c;LT6911C具有可配置的单端口或双端口MIPIDSI/CSI&#xff0c;具有1个高速时钟通道和1个~4个高速数据通道&#…...

vue动态引入静态资源

vue动态引入静态资源 静态资源位置&#xff08;../../assets/piecture/page404.jpg&#xff09;或者&#xff08;/assets/piecture/page404.jpg&#xff09; 错误引入方式 错误引入方式&#xff08;一&#xff09; <template><div><img :src"../../asset…...

perl 强制覆盖拷贝文件

如果你想在Perl中进行文件拷贝时强制覆盖目标文件&#xff08;如果目标文件已经存在&#xff09;&#xff0c;你可以使用标准模块File::Copy提供的cp函数&#xff0c;它允许你指定是否覆盖目标文件。 以下是一个示例&#xff0c;展示了如何在Perl中进行强制覆盖拷贝文件&#…...

C语言每日一题之整数求二进制1的个数

今天分享一道题目&#xff0c;用三种方法来求解 二进制1的个数 方法1 我们的十进制除10和取余数就可以得到我们每一位的数字&#xff0c;那我们的二进制也可 以 #include<stdio.h> int num_find_1(unsigned int n) {int count 0;while (n){if (1 n % 2){count;}n / 2…...

AcWing 4443.无限区域

原题链接&#xff1a;AcWing 4443.无限区域 题目来源&#xff1a;夏季每日一题2023 给定一个无限大的二维平面&#xff0c;设点 S 为该平面的中心点。 设经过点 S 的垂直方向的直线为 P&#xff0c;如果直线 P 是一个圆的切线&#xff0c;且切点恰好为点 S&#xff0c;那么&a…...

2D坐标系下的点的转换矩阵(平移、缩放、旋转、错切)

文章目录 1. 平移 &#xff08;Translation&#xff09;2. 缩放 &#xff08;Scaling&#xff09;3. 旋转 &#xff08;Rotation&#xff09;4. 错切 &#xff08;Shearing&#xff09;5. 镜像 &#xff08;Reflection&#xff09; 1. 平移 &#xff08;Translation&#xff09…...

【Rabbitmq】报错:ERROR CachingConnectionFactory Channel shutdown: channel error;

报错内容 ERROR CachingConnectionFactory Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code406, reply-textPRECONDITION_FAILED - unknown delivery tag 1, class-id60, method-id80) 原因 默认是自动ack&#xff0c;然后你代码…...

el-table组件的el-table-column电脑端使用fixed属性固定,移动端不使用固定,怎么实现?

要在电脑端使用 fixed 固定列&#xff0c;而在移动端不使用&#xff0c;可以使用 CSS 媒体查询结合 Vue 的动态绑定来实现。以下是一个示例代码&#xff1a; <template><el-table><el-table-columnprop"name"label"Name":fixed"isDesk…...

RocketMQ 行业分享

5.0的架构发生了重大调整&#xff0c;添加了一层rocketmq-proxy,可以通过grpc的方式接入。 参考 https://juejin.cn/post/7199413150973984827...

物联网场景中的边缘计算解决方案有哪些?

在物联网场景中&#xff0c;边缘计算是一种重要的解决方案&#xff0c;用于在物联网设备和云端之间进行实时数据处理、分析和决策。HiWoo Box作为工业边缘网关设备&#xff0c;具备边缘计算能力&#xff0c;包括单点公式计算、Python脚本编程以及规则引擎&#xff0c;它为物联网…...

【C++ 进阶】学习导论:C/C++ 进阶学习路线、大纲与目标

目录 一、C 学习路线 二、C 课程大纲与学习目标 &#xff08;1&#xff09;第一阶段&#xff1a;C 语言基础 &#xff08;2&#xff09;第二阶段&#xff1a;C 高级编程 &#xff08;3&#xff09;第三阶段&#xff1a;C 核心编程与桌面应用开发 &#xff08;4&#xf…...

【数据结构】实验七:字符串

实验七 字符串实验报告 一、实验目的与要求 1&#xff09;巩固对串的理解&#xff1b; 2&#xff09;掌握串的基本操作实现&#xff1b; 3&#xff09;掌握 BF 和 KMP 算法思想。 二、实验内容 1. 给定一个字符串ababcabcdabcde和一个子串abcd,查找字串是否在主串中出现。…...

排序算法、

描述 由小到大输出成一行&#xff0c;每个数字后面跟一个空格。 输入 三个整数 输出 输入三个整数&#xff0c;按由小到大的顺序输出。 输入样例 1 2 3 1 输出样例 1 1 2 3 输入样例 2 4 5 2 输出样例 2 2 4 5 代码一&#xff08;如下&#xff09;&#xff1…...

rbd快照管理、rbd快照克隆原理与实现、rbd镜像开机自动挂载、ceph文件系统、对象存储、配置对象存储客户端、访问Dashboard

day04 day04快照快照克隆开机自动挂载ceph文件系统使用MDS对象存储配置服务器端配置客户端访问Dashborad 快照 快照可以保存某一时间点时的状态数据快照是映像在特定时间点的只读逻辑副本希望回到以前的一个状态&#xff0c;可以恢复快照使用镜像、快照综合示例 # 1. 在rbd存…...

vue、vuex、vue-router初学导航配合elementui及vscode快捷键

目录 一、vue资源 1.vue知识库汇总 2.vuejs组件 3.Vue.js 组件编码规范 目标 #目录 #基于模块开发...

Elasticsearch:使用 ELSER 释放语义搜索的力量:Elastic Learned Sparse EncoderR

问题陈述 在信息过载的时代&#xff0c;根据上下文含义和用户意图而不是精确的关键字匹配来查找相关搜索结果已成为一项重大挑战。 传统的搜索引擎通常无法理解用户查询的语义上下文&#xff0c;从而导致相关性较低的结果。 解决方案&#xff1a;ELSER Elastic 通过其检索模型…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...