C++ 中的不区分大小写搜索2025年5月15日 | 阅读 9 分钟 在 C++ 中执行不区分大小写的搜索需要先将字符转换为一致的大小写(大写或小写),然后再进行比较。这可以确保字母大小写的差异不会影响搜索结果。 在执行区分大小写的搜索时,比较会考虑字母的精确大小写(例如,“A” ≠“a”)。相反,不区分大小写的搜索会忽略字母的大小写,将“A”和“a”视为相等。 带示例的说明假设您有一个源 字符串 和一个搜索词
要执行不区分大小写的搜索 将“Hello World”和“world”都转换为小写
使用 std::string::find 在小写源字符串中查找小写的搜索词。 方法 1:简单方法示例输出 Enter the source string: Hello World Enter the search term: WORLD The search term "WORLD" was not found in the source string. 说明步骤 1:接收用户输入 程序首先要求用户输入两个字符串
这两种输入都使用允许文本中包含空格的方法来收集,以确保输入的灵活性。 步骤 2:创建搜索逻辑函数 为了使代码可重用和模块化,实际的搜索逻辑被写入一个单独的函数中。这个 函数 接受两个字符串作为输入
这种关注点分离确保了搜索逻辑可以在程序的其他部分需要时重用。 步骤 3:标准化两个字符串 不区分大小写的搜索要求忽略字母的大小写。例如,“World”和“world”应该被视为相同。为了实现这一点 创建源字符串和搜索字符串的副本,以保留它们的原始形式。 将两个字符串中的所有字符都转换为小写。
步骤 4:执行搜索 将两个字符串都转换为小写后
步骤 5:返回搜索结果 然后函数评估是否找到了目标字符串
步骤 6:向用户显示结果 回到程序的主体部分 使用输入字符串调用该函数,并检查结果。 根据结果
复杂度分析时间复杂度 复制字符串
转换为小写
搜索子字符串
总时间复杂度 综合来看,总时间复杂度为 O(n+m+n⋅m)。在大多数情况下,O(n⋅m) 项是最显著的。 空间复杂度 额外字符串
临时变量
总空间复杂度 由于存储了转换后的字符串,空间复杂度为 O(n+m)。 方法 2:直接不区分大小写比较此方法逐个比较源字符串和目标字符串的每个字符,在过程中仅将参与比较的字符转换为相同的大小写(大写或小写)。它避免了进行全字符串转换的需要,并在空间方面更有效。 程序输出 Enter the source string: Hello world Enter the search term HELLO The search term "HELLO" was found in the source string. 说明步骤 1:接受输入 程序首先要求用户输入两个字符串 源字符串: 这是我们要搜索目标字符串的字符串。 搜索词: 这是我们要在此源字符串中查找的子字符串。 这些输入使用 std::getline 收集,它允许用户输入多词字符串,包括空格。 步骤 2:开始搜索 搜索的核心逻辑封装在一个函数中。该函数接受两个参数
该函数的目标是如果目标字符串存在于源字符串中则返回 true,如果不存在则返回 false。 步骤 3:遍历源字符串 下一步是遍历源字符串。思路是检查源字符串中搜索词可能开始的每个可能位置,然后比较字符。
步骤 4:比较每个子字符串 对于源字符串中的每个潜在起始位置,程序会将该位置开始的子字符串与搜索词进行比较
但是,为了使其不区分大小写,我们不直接比较字符。相反,在比较之前,将源字符串和搜索字符串中的两个字符都转换为相同的大小写(大写或小写)。这确保了像“A”和“a”或“b”和“B”这样的字符被视为相等。 步骤 5:检查匹配项 如果源子字符串中的每个字符都与搜索词中的相应字符匹配(以不区分大小写的方式),我们可以得出结论,我们在源字符串中找到了搜索词。在这种情况下,函数会立即返回 true,表示成功匹配。 如果即使有一个字符不匹配(即使是不区分大小写的),函数也会将比较标记为失败,并继续检查源字符串中的下一个可能的起始位置。 步骤 6:处理不匹配项 如果程序在源字符串中检查完所有可能的起始位置而没有找到匹配项,则返回 false。这意味着目标字符串不存在于源字符串中。 步骤 7:输出结果 最后,搜索结果(目标是否找到)将在程序的主体部分显示给用户
复杂度分析时间复杂度
空间复杂度
优点空间利用率 无完整字符串转换
简单直接
对小输入高效
易于理解和实现
缺点最坏情况时间复杂度
重复的大小写转换
对大型输入的优化有限
无法并行化
有限的案例处理
|
在本文中,我们将讨论,包括其语法、示例、优点等。引言 C++ 中的并发问题可能由潜在的竞争条件和死锁引起。为了缓解这些问题,C++ 标准库提供了同步原语,包括……
7 分钟阅读
圆周排列中的盒子连接是计算机编程中的经典问题之一,以及其他一些关于数据结构的问题。有些表述要求将提供的盒子或片段以圆周排列的形式形成,这成为挑战的关键......
阅读 4 分钟
在本文中,我们将讨论如何在 C++ 中最小化数组之间对应索引处不相等元素的数量。引言 在 C++ 编程中,我们处理一个适用于许多不同场景的主题,从竞争性编程到需要关键数据对齐和减少的现实世界情况...
7 分钟阅读
?C++23,这是最新的 C++ 标准,如今已在很大程度上被采用。它动态且丰富,拥有许多新功能,可以帮助我们改进语言的词汇和语篇。本文将描述每项新功能,这些功能将……
阅读 4 分钟
Bogosort 是一种非常低效的排序算法,它通过随机置换数组元素直到数组按正确的顺序排列来工作。由于其平均情况和最坏情况下的时间复杂度极差(阶乘),因此在实践中无法使用。该算法通过...
阅读 15 分钟
在本文中,我们将讨论 C++ 中的中心立方数。在讨论 C++ 中的中心立方数之前。我们必须了解公式,如时间复杂度和空间复杂度。中心立方数:中心立方数是一种独特的图数,代表创建的三维结构...
阅读 4 分钟
在数学中,任何正整数 n 被认为是三完全数,如果其所有除数(包括 n 本身)的总和等于 3n。它属于多完全数类,其中 σ(n)=k⋅n,其中 k=3。例如,数字 120 是三完全数,因为它的除数之和...
阅读 4 分钟
引言 在计算机科学和数学的不同领域,模运算是一个非常重要的概念。模乘逆是其核心概念之一。在本文中,我们将探讨什么是模乘逆,它为什么重要以及如何使用...高效地计算它。
阅读9分钟
引言 C 和 C++ 编程语言提供了不同的结构来控制程序执行流程。exit() 和 break 是两种具有不同目的的机制。本次讨论的目的是全面了解 exit() 和 break 之间的区别,……
5 分钟阅读
引言 在 C++ 中,std::unordered_set 作为一种灵活的容器,提供了基于哈希的方法来存储不同的项。与保持元素排序的 std::set 不同,std::unordered_set 无法对其包含的组件进行排序。相反,此技术利用...
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India