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、如果有…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...