Let’s Make C++ Great Again——string与常用字符处理函数
文章目录
- string
- 使用string类的例子,统计一个字符串中单词的个数:
- 在算法模拟题中
- 翻转字符串:
- 判断回文字符串:
- 字符串查找:
- 字符串替换:
- 常用字符处理函数
- strlen()
- strcpy()
- strcat()
- strcmp()
- toupper() 和 tolower()
- isdigit() 和 isalpha()
- strncpy()
- strchr() 和 strrchr()
- strstr()
- isalnum() 和 isxdigit()
- isspace()
- isupper() 和 islower()
- sprintf()
string
在C++中,string是一个表示字符串的类,它提供了一系列方法来方便地操作字符串。与C语言中的字符串不同,string类是一个对象,可以像其他对象一样使用各种成员函数来处理它。
下面是一些常用的string方法:
length()或size():返回字符串中字符的个数。substr(pos, len):返回从位置pos开始,长度为len的子串。append(str)或operator+=(str):在字符串末尾添加str。insert(pos, str):在位置pos插入字符串str。erase(pos, len):删除从位置pos开始,长度为len的子串。replace(pos, len, str):用字符串str替换从位置pos开始,长度为len的子串。find(str)或find(str, pos):在字符串中查找子串str,返回子串的起始位置,如果查找不到则返回string::npos。compare(str):比较字符串与str,返回0表示相等,小于0表示当前字符串小于str,大于0表示当前字符串大于str。c_str():返回一个指向字符串内容的指针。empty():判断字符串是否为空,如果为空则返回true,否则返回false。clear():清空字符串中的所有字符。push_back(ch):在字符串末尾添加字符ch。pop_back():删除字符串末尾的一个字符。getline():从输入流中读取一行字符串,直到遇到换行符或文件结束符。at(index)或operator[](index):返回字符串中索引为index的字符。front():返回字符串中的第一个字符。back():返回字符串中的最后一个字符。reserve(n):预留至少能容纳n个字符的空间,避免频繁分配内存。capacity():返回当前字符串能容纳的最大字符数。resize(n)或resize(n, ch):调整字符串的大小为n,如果字符串变大,则在末尾填充字符ch;如果字符串变小,则删除末尾的字符。shrink_to_fit():将字符串的容量缩小到与其大小相同,释放多余的内存。
下面是一个使用string类的例子,将一个字符串中的大写字母转换为小写字母:
#include <iostream>
#include <string>using namespace std;int main() {string s = "Hello, World!";for (int i = 0; i < s.length(); i++) {if (s[i] >= 'A' && s[i] <= 'Z') {s[i] = s[i] - 'A' + 'a';}}cout << s << endl;return 0;
}
hello, world!
可以看到,程序成功地将字符串中的大写字母转换为小写字母。
使用string类的例子,统计一个字符串中单词的个数:
#include <iostream>
#include <string>using namespace std;int main() {string s = "Hello, World! This is a test.";int count = 0;for (int i = 0; i < s.length(); i++) {if (s[i] == ' ') {count++;}}count++; // 最后一个单词没有空格,所以需要额外加一次cout << "Number of words: " << count << endl;return 0;
}
Number of words: 6
可以看到,程序成功地统计了字符串中单词的个数。
总之,string类是一个非常实用的类,可以方便地处理字符串。在实际编程中,我们可以根据需要使用不同的方法来操作字符串,以实现各种功能。
在算法模拟题中
在算法模拟题中,string类是一个非常有用的工具,可以方便地处理字符串。下面是一些常见的使用string的算法模拟题:
翻转字符串:
将一个字符串翻转过来,例如将字符串"hello"变成"olleh"。可以使用string类的reverse()方法来实现。
#include <iostream>
#include <string>using namespace std;int main() {string s = "hello";reverse(s.begin(), s.end());cout << s << endl;return 0;
}
olleh
判断回文字符串:
判断一个字符串是否是回文字符串,即正着读和倒着读都一样,例如"level"是回文字符串,而"hello"不是。可以使用string类的reverse()方法或双指针来实现。
#include <iostream>
#include <string>using namespace std;int main() {string s = "level";string t = s;reverse(t.begin(), t.end());if (s == t) {cout << "Yes" << endl;} else {cout << "No" << endl;}return 0;
}
Yes
字符串查找:
在一个字符串中查找另一个字符串出现的位置,例如在字符串"hello, world"中查找子串"wor"的位置。可以使用string类的find()方法来实现。
#include <iostream>
#include <string>using namespace std;int main() {string s = "hello, world";string t = "wor";int pos = s.find(t);if (pos != string::npos) {cout << "Found at position " << pos << endl;} else {cout << "Not found" << endl;}return 0;
}
Found at position 7
字符串替换:
在一个字符串中将某个子串替换为另一个字符串,例如将字符串"hello, world"中的子串"world"替换为"universe"。可以使用string类的replace()方法来实现。
#include <iostream>
#include <string>using namespace std;int main() {string s = "hello, world";string t = "world";string u = "universe";int pos = s.find(t);if (pos != string::npos) {s.replace(pos, t.length(), u);}cout << s << endl;return 0;
}
hello, universe
总之,string类是一个非常实用的工具,在算法模拟题中可以方便地处理字符串。需要注意的是,在使用string类时,要注意字符串的长度、空间占用等问题,以避免出现不必要的错误。
常用字符处理函数
当然,以下是一些在编程中常用的字符处理函数:
strlen()
strlen() 函数可以返回一个字符串的长度,即该字符串中非空字符的数量。例如:
char s[] = "hello world";
int len = strlen(s); // len = 11
需要注意的是,strlen() 函数只能用于处理以 \0 结尾的字符串,否则可能会导致未定义的行为。
strcpy()
strcpy() 函数可以将一个字符串复制到另一个字符串中。例如:
char s1[] = "hello";
char s2[10];
strcpy(s2, s1); // 将 s1 复制到 s2 中
需要注意的是,strcpy() 函数会将源字符串中的 \0 也复制到目标字符串中,因此需要确保目标字符串有足够的空间来存储复制后的字符串。
strcat()
strcat() 函数可以将一个字符串追加到另一个字符串的末尾。例如:
char s1[] = "hello";
char s2[] = "world";
strcat(s1, s2); // 将 s2 追加到 s1 的末尾
需要注意的是,strcat() 函数会将源字符串中的 \0 也追加到目标字符串的末尾,因此需要确保目标字符串有足够的空间来存储追加后的字符串。
strcmp()
strcmp() 函数可以比较两个字符串的大小关系。如果两个字符串相等,则返回 0;如果第一个字符串小于第二个字符串,则返回一个负数;如果第一个字符串大于第二个字符串,则返回一个正数。例如:
char s1[] = "hello";
char s2[] = "world";
int cmp = strcmp(s1, s2); // cmp < 0
需要注意的是,strcmp() 函数会比较两个字符串的每个字符,直到出现不同的字符或其中一个字符串结束。
toupper() 和 tolower()
toupper() 函数可以将一个小写字母转换为大写字母,而 tolower() 函数可以将一个大写字母转换为小写字母。例如:
char c = 'a';
char d = toupper(c); // d = 'A'
isdigit() 和 isalpha()
isdigit() 函数可以判断一个字符是否为数字字符(即 0 到 9 中的任意一个字符),而 isalpha() 函数可以判断一个字符是否为字母字符(即 A 到 Z 或 a 到 z 中的任意一个字符)。例如:
char c = '9';
if (isdigit(c)) {cout << c << " 是数字字符。" << endl;
}
这些只是编程中常用的一些字符处理函数的例子。通过使用这些函数,您可以使您的代码更简洁、易读和易于维护。
strncpy()
strncpy() 类似于 strcpy(),但它允许您从源字符串复制指定数量的字符到目标字符串中。例如:
char s1[] = "hello";
char s2[10];
strncpy(s2, s1, 3); // 复制 s1 的前 3 个字符到 s2 中
strchr() 和 strrchr()
strchr() 函数搜索字符串中指定字符的第一个出现位置,并返回该位置的指针,而 strrchr() 函数搜索字符串中指定字符的最后一个出现位置,并返回该位置的指针。例如:
char s[] = "hello world";
char* p = strchr(s, 'o'); // p 指向第一个 'o'
p = strrchr(s, 'o'); // p 指向最后一个 'o'
strstr()
strstr() 函数搜索字符串中指定子字符串的第一个出现位置,并返回该位置的指针。例如:
char s[] = "hello world";
char* p = strstr(s, "world"); // p 指向 "world" 子字符串
isalnum() 和 isxdigit()
isalnum() 函数可以判断一个字符是否为字母或数字字符,而 isxdigit() 函数可以判断一个字符是否为十六进制数字字符。例如:
char c = 'A';
if (isalnum(c)) {cout << c << " 是字母或数字字符。" << endl;
}
if (isxdigit(c)) {cout << c << " 是十六进制数字字符。" << endl;
}
isspace()
isspace() 函数可以判断一个字符是否为空格字符(即空格、制表符、换行符、回车符、换页符或垂直制表符中的任意一个字符)。例如:
char c = ' ';
if (isspace(c)) {cout << c << " 是空格字符。" << endl;
}
isupper() 和 islower()
isupper() 函数可以判断一个字符是否为大写字母,而 islower() 函数可以判断一个字符是否为小写字母。例如:
char c = 'A';
if (isupper(c)) {cout << c << " 是大写字母。" << endl;
}
sprintf()
sprintf() 函数可以通过替换占位符来格式化字符串。例如:
int x = 42;
char s[20];
sprintf(s, "答案是 %d。", x); // s = "答案是 42。"
这些只是编程中常用的一些字符处理函数的例子。通过使用这些函数,您可以使您的代码更简洁、易读和易于维护。
相关文章:
Let’s Make C++ Great Again——string与常用字符处理函数
文章目录 string使用string类的例子,统计一个字符串中单词的个数:在算法模拟题中翻转字符串:判断回文字符串:字符串查找:字符串替换: 常用字符处理函数strlen()strcpy()strcat()strcmp()toupper() 和 tolow…...
〖Python网络爬虫实战⑰〗- 网页解析利器parsel实战
订阅:新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列(零基础小白搬砖逆袭) 说明:本专栏持续更新中,目前专栏免费订阅,在转为付费专栏前订阅本专栏的,可以免费订阅付…...
中电金信:生成式AI热潮下,文本智能走向何方?
突破通用人工智能场景,生成式AI正在向全行业应用进攻。 一个脑筋急转弯,几个月前ChatGPT是这样回答的: 然而,仅仅几个月的迭代,它的回答却让人出乎意料。 看似调侃的对比背后实则是无数次模型训练的支撑。基于数据的激…...
探索Linux设备树:硬件描述与驱动程序的桥梁
目录标题 引言:Linux设备树简介 | Introduction: Linux Device Tree Overviewa. 设备树的背景与发展 | Background and Development of Device Treeb. 设备树的作用与意义 | The Role and Significance of Device Tree 设备树语法与结构 | Device Tree Syntax and S…...
UNION ALL用法 以及 UNION ALL和UNION的区别
部分参考自文章: https://blog.csdn.net/a200822146085/article/details/119545374(CC 4.0 BY-SA版权协议)CSDN「我心依依旧」 https://www.1keydata.com/cn/sql/sql-unionall.php SQL Union All SQL指令 UNION ALL用法 UNION ALL 这个指令的目的也是要将两个 SQL 语…...
Ubuntu Linux操作
引言 晚上上课发现桌子上遗留了这本书,水课就看了看学习下,以下内容直接总结知识点 磁盘内存解析 (1)硬盘有数个盘片,每个盘片两个面,每个面一个磁头。 (2)盘片被划分为多个扇形区域即扇区。 (3)同一盘片不同半径的同心圆为磁道。 (4)不同盘片相同半径…...
MongoDB常用语句(CURD)
文章目录 一、数据库操作二、集合操作三、文档操作3.1 插入文档3.2 查询文档3.3 更新文档3.4 删除文档 四、安全认证4.1 创建管理员账号4.2 创建应用数据库用户4.3 启动和连接 (校验方式) 提示:以下是本篇文章正文内容,MongoDB 系列学习将会持续更新 一…...
一篇文章让你彻底学会--节流(并且自己可以手写)
Hi,有的小伙伴们在面试的时候会被要求手写节流函数,很多都被难着了吧,宝贝,那你你没有理解节流函数。 今天,就让我带你攻克它! 1.节流 单位时间内,事件触发,最多只执行一次事件回调。 人话:说…...
C++ 形参是类的指针 class * 通过new的方式创建对象
当你在C中使用类指针(class *)作为函数的形参,并通过 new 关键字创建对象时,这种用法确实会改变类对象的值。原因是你通过指针传递了对象的内存地址,而不是传递对象本身。这意味着在函数内部对对象的任何修改都会直接影…...
手把手教你将项目部署到服务器!
一、导入centos7虚拟机: 打开VMWare,点击“打开虚拟机”,选择centos7.ova之后,选择存储路径: 点击导入: 选择“不再显示此消息”,点击“重试”按钮: 点击“编辑虚拟机设置”&#x…...
OpenHarmony应用开发-ArkUI方舟开发框架简析
方舟开发框架(简称ArkUI)为OpenHarmony应用的UI开发提供了完整的基础设施,包括简洁的UI语法、丰富的UI功能(组件、布局、动画以及交互事件),以及实时界面预览工具等,可以支持开发者进行可视化界…...
【Transformer系列(4)】Transformer模型结构超详细解读
前言 前一篇我们一起读了Transformer的论文《Attention Is All You Need》,不知道大家是否真的理解这个传说中的神(反正俺是没有~) 这两天我又看了一些视频讲解,感谢各位大佬的解读,让我通透了不少。 这篇文章就和…...
Idea启动运行报错:Error:java: 无效的源发行版: 13
最近在做Springboot项目时,常常出现上述错误,小编也不知道怎么回事,到网上找了这个方面的解决办法,但是却发现根本解决不了,最终通过小编多次尝试,终于发现,为什么会报这个错误。(应该是Java版本…...
【元分析研究方法】学习笔记1.形成问题
步骤1 形成问题 该步骤的作用该步骤中需要注意的问题该步骤中部分知识点我的收获 参考来源:库珀 (Cooper, H. M. )., 李超平, & 张昱城. (2020). 元分析研究方法: A step-by step approach. 中国人民大学出版社. 这章内容很简单:①变量的刻画&#x…...
2023年3月 青少年软件编程(Python) 等级考试试卷(五级)
一、单选题(共25题,共50分) 1.已知一个列表lst [2,3,4,5,6],lst.append(20),print(lst)的结果是?(C)(2分) A.[10,2,3,4,5,6,20] B.[20,2,10,3,4,5,6] C.[2,3,4,5,6,20] D.[2,3,4,5,…...
必须要知道的hive调优知识(上)
Hive数据倾斜以及解决方案 1、什么是数据倾斜 数据倾斜主要表现在,map/reduce程序执行时,reduce节点大部分执行完毕,但是有一个或者几个reduce节点运行很慢,导致整个程序的处理时间很长,这是因为某一个key的条数比其…...
什么是Cache Aside Pattern与延迟双删
Cache Aside Pattern是一种常用的缓存设计模式,用于在应用程序中使用缓存提高系统性能的同时,避免缓存与数据库数据不一致的情况出现。延迟双删是Cache Aside Pattern的一种优化,可以进一步提高系统性能。 以下是关于Cache Aside Pattern和延…...
frp 流量特征
frp 流量特征 非常明显的明文流量特征...
Unity --- UGUI(Unity Graphical user interface)--- Canvas画布
1.UI --- User Interface --- 使用者与机器之间的交互界面 1.所谓的自适应系统指的是分辨率的适应: 比如在一个分辨率下做的UI放到另一个分辨率下显示时,如果没有自适应系统的话就会导致UI过大,过小,被辟成一半等等情况ÿ…...
c++积累6-内联函数
1、说明 内联函数是c为提高程序运行速度所做的一项改进。 2、常规函数运行 编译的可执行程序:由一组机器语言指令组成。 程序执行: 1、操作系统将这些指令载入到内存,每条指令都有一个特定的内存地址 2、计算机逐步执行这些指令 3、如果有…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
无人机侦测与反制技术的进展与应用
国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
