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

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类的例子&#xff0c;统计一个字符串中单词的个数&#xff1a;在算法模拟题中翻转字符串&#xff1a;判断回文字符串&#xff1a;字符串查找&#xff1a;字符串替换&#xff1a; 常用字符处理函数strlen()strcpy()strcat()strcmp()toupper() 和 tolow…...

〖Python网络爬虫实战⑰〗- 网页解析利器parsel实战

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付…...

中电金信:生成式AI热潮下,文本智能走向何方?

突破通用人工智能场景&#xff0c;生成式AI正在向全行业应用进攻。 一个脑筋急转弯&#xff0c;几个月前ChatGPT是这样回答的&#xff1a; 然而&#xff0c;仅仅几个月的迭代&#xff0c;它的回答却让人出乎意料。 看似调侃的对比背后实则是无数次模型训练的支撑。基于数据的激…...

探索Linux设备树:硬件描述与驱动程序的桥梁

目录标题 引言&#xff1a;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的区别

部分参考自文章&#xff1a; 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操作

引言 晚上上课发现桌子上遗留了这本书&#xff0c;水课就看了看学习下&#xff0c;以下内容直接总结知识点 磁盘内存解析 (1)硬盘有数个盘片,每个盘片两个面,每个面一个磁头。 (2)盘片被划分为多个扇形区域即扇区。 (3)同一盘片不同半径的同心圆为磁道。 (4)不同盘片相同半径…...

MongoDB常用语句(CURD)

文章目录 一、数据库操作二、集合操作三、文档操作3.1 插入文档3.2 查询文档3.3 更新文档3.4 删除文档 四、安全认证4.1 创建管理员账号4.2 创建应用数据库用户4.3 启动和连接 (校验方式) 提示&#xff1a;以下是本篇文章正文内容&#xff0c;MongoDB 系列学习将会持续更新 一…...

一篇文章让你彻底学会--节流(并且自己可以手写)

Hi,有的小伙伴们在面试的时候会被要求手写节流函数&#xff0c;很多都被难着了吧&#xff0c;宝贝&#xff0c;那你你没有理解节流函数。 今天&#xff0c;就让我带你攻克它&#xff01; 1.节流 单位时间内&#xff0c;事件触发&#xff0c;最多只执行一次事件回调。 人话:说…...

C++ 形参是类的指针 class * 通过new的方式创建对象

当你在C中使用类指针&#xff08;class *&#xff09;作为函数的形参&#xff0c;并通过 new 关键字创建对象时&#xff0c;这种用法确实会改变类对象的值。原因是你通过指针传递了对象的内存地址&#xff0c;而不是传递对象本身。这意味着在函数内部对对象的任何修改都会直接影…...

手把手教你将项目部署到服务器!

一、导入centos7虚拟机&#xff1a; 打开VMWare&#xff0c;点击“打开虚拟机”&#xff0c;选择centos7.ova之后&#xff0c;选择存储路径&#xff1a; 点击导入&#xff1a; 选择“不再显示此消息”&#xff0c;点击“重试”按钮&#xff1a; 点击“编辑虚拟机设置”&#x…...

OpenHarmony应用开发-ArkUI方舟开发框架简析

方舟开发框架&#xff08;简称ArkUI&#xff09;为OpenHarmony应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff09;&#xff0c;以及实时界面预览工具等&#xff0c;可以支持开发者进行可视化界…...

【Transformer系列(4)】Transformer模型结构超详细解读

前言 前一篇我们一起读了Transformer的论文《Attention Is All You Need》&#xff0c;不知道大家是否真的理解这个传说中的神&#xff08;反正俺是没有~&#xff09; 这两天我又看了一些视频讲解&#xff0c;感谢各位大佬的解读&#xff0c;让我通透了不少。 这篇文章就和…...

Idea启动运行报错:Error:java: 无效的源发行版: 13

最近在做Springboot项目时&#xff0c;常常出现上述错误&#xff0c;小编也不知道怎么回事&#xff0c;到网上找了这个方面的解决办法&#xff0c;但是却发现根本解决不了&#xff0c;最终通过小编多次尝试&#xff0c;终于发现&#xff0c;为什么会报这个错误。(应该是Java版本…...

【元分析研究方法】学习笔记1.形成问题

步骤1 形成问题 该步骤的作用该步骤中需要注意的问题该步骤中部分知识点我的收获 参考来源&#xff1a;库珀 (Cooper, H. M. )., 李超平, & 张昱城. (2020). 元分析研究方法: A step-by step approach. 中国人民大学出版社. 这章内容很简单&#xff1a;①变量的刻画&#x…...

2023年3月 青少年软件编程(Python) 等级考试试卷(五级)

一、单选题(共25题&#xff0c;共50分) 1.已知一个列表lst [2,3,4,5,6]&#xff0c;lst.append(20)&#xff0c;print(lst)的结果是&#xff1f;&#xff08;C&#xff09;&#xff08;2分&#xff09; 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、什么是数据倾斜 数据倾斜主要表现在&#xff0c;map/reduce程序执行时&#xff0c;reduce节点大部分执行完毕&#xff0c;但是有一个或者几个reduce节点运行很慢&#xff0c;导致整个程序的处理时间很长&#xff0c;这是因为某一个key的条数比其…...

什么是Cache Aside Pattern与延迟双删

Cache Aside Pattern是一种常用的缓存设计模式&#xff0c;用于在应用程序中使用缓存提高系统性能的同时&#xff0c;避免缓存与数据库数据不一致的情况出现。延迟双删是Cache Aside Pattern的一种优化&#xff0c;可以进一步提高系统性能。 以下是关于Cache Aside Pattern和延…...

frp 流量特征

frp 流量特征 非常明显的明文流量特征...

Unity --- UGUI(Unity Graphical user interface)--- Canvas画布

1.UI --- User Interface --- 使用者与机器之间的交互界面 1.所谓的自适应系统指的是分辨率的适应&#xff1a; 比如在一个分辨率下做的UI放到另一个分辨率下显示时&#xff0c;如果没有自适应系统的话就会导致UI过大&#xff0c;过小&#xff0c;被辟成一半等等情况&#xff…...

c++积累6-内联函数

1、说明 内联函数是c为提高程序运行速度所做的一项改进。 2、常规函数运行 编译的可执行程序&#xff1a;由一组机器语言指令组成。 程序执行&#xff1a; 1、操作系统将这些指令载入到内存&#xff0c;每条指令都有一个特定的内存地址 2、计算机逐步执行这些指令 3、如果有…...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2

每日一言 今天的每一份坚持&#xff0c;都是在为未来积攒底气。 案例&#xff1a;OLED显示一个A 这边观察到一个点&#xff0c;怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 &#xff1a; 如果代码里信号切换太快&#xff08;比如 SDA 刚变&#xff0c;SCL 立刻变&#…...

安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖

在Vuzix M400 AR智能眼镜的助力下&#xff0c;卢森堡罗伯特舒曼医院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;凭借在无菌制剂生产流程中引入增强现实技术&#xff08;AR&#xff09;创新项目&#xff0c;荣获了2024年6月7日由卢森堡医院药剂师协会&#xff0…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...