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

[温习C/C++]C++刷题技巧—字符串查找find、find_if、find_first_of和find_last_of

系列文章目录

[温习C/C++]0x00-STL标准模板库概述
[温习C/C++]0x01-STL泛型算法-持续更新长文版
[温习C/C++]0x03-sort排序
[温习C/C++]0x04 C++刷题基础编码技巧
[温习C/C++]0x05 C++刷题技巧—set自定义排序及查找
[温习C/C++]0x06 坐标系中矩形重叠类问题分析

C++刷题技巧—字符串查找find、find_if、find_first_of和find_last_of

  • 系列文章目录
  • 更新日志
  • std::find
    • 定义
    • 说明
    • 例子
  • std::find_if
    • 定义
    • 说明
    • 例子
  • std::find_first_of
    • 定义
    • 说明
    • 例子
  • std::find_last_of
    • 定义
    • 说明
    • 例子
  • Leetcode 345.反转字符串中的元音字母

更新日志

日期变更内容
2025-10-01完成初稿

std::find

定义

Defined in header <algorithm>		template <class InputIterator, class T>   InputIterator find (InputIterator first, InputIterator last, const T& val);

说明

  • 核心功能:在指定范围 [first, last) 内查找与值 val 相等的元素。

  • 返回结果:
    若找到匹配元素,返回指向该首个匹配元素的迭代器;
    若未找到匹配元素,返回指向范围末尾(即 last)的迭代器。

  • 查找范围:左闭右开区间 [first, last),意味着包含 first 指向的元素,不包含 last 指向的元素。

例子

#include <iostream>
#include <algorithm>
#include <string>using namespace std;int main()
{const auto v = {1, 2, 3, 4};for (auto& n : {3, 5}) {if (find(v.begin(), v.end(), n) == v.end()) {cout << "v does not contain " << n << endl;} else {cout << "v contains " << n << endl;}}
}
  • 输出
v contains 3
v does not contain 5

std::find_if

定义

template <class InputIterator, class UnaryPredicate>   InputIterator find_if (InputIterator first, InputIterator last, UnaryPredicate pred);

说明

  • 核心功能:
    在指定范围 [first, last) 内查找与值 val 相等的元素。

  • 返回结果:
    若找到匹配元素,返回指向该首个匹配元素的迭代器;
    若未找到匹配元素,返回指向范围末尾(即 last)的迭代器。

  • 查找范围:左闭右开区间 [first, last),意味着包含 first 指向的元素,不包含 last 指向的元素。

例子

#include <iostream>
#include <algorithm>
#include <string>using namespace std;int main()
{auto is_even = [](int i) { return i % 2 == 0; };vector<int> nums = {3, 1, 4, 1, 3, 5};if (auto it = std::find_if(nums.begin(), nums.end() ,is_even); it != nums.end()) {cout << "w contains an even number " << *it << endl;} else {cout << "w does not contain even numbers" << endl;}
}
  • Output
w contains an even number 4

std::find_first_of

定义

equality (1)	
template <class InputIterator, class ForwardIterator>   InputIterator find_first_of (InputIterator first1, InputIterator last1, orwardIterator first2, ForwardIterator last2);predicate (2)	
template <class InputIterator, class ForwardIterator, class BinaryPredicate>   InputIterator find_first_of (InputIterator first1, InputIterator last1,  orwardIterator first2, ForwardIterator last2,  BinaryPredicate pred);

说明

判断是否有前者[first1, last1) 是否有包含后者[first2, lasht2) 的子串。

例子

参考资料: https://cplusplus.com/reference/algorithm/find_first_of/

#include <iostream>     // std::cout
#include <algorithm>    // std::find_first_of
#include <vector>       // std::vector
#include <cctype>       // std::tolowerbool comp_case_insensitive (char c1, char c2) {return (std::tolower(c1)==std::tolower(c2));
}int main () {int mychars[] = {'a','b','c','A','B','C'};std::vector<char> charStack (mychars,mychars+6);std::vector<char>::iterator it;int needle[] = {'A','B','C'};// using default comparison:it = find_first_of (charStack.begin(), charStack.end(), needle, needle + 3);if (it!=charStack.end())std::cout << "The first match is: " << *it << '\n';// using predicate comparison:it = find_first_of (charStack.begin(), charStack.end(),needle, needle + 3, comp_case_insensitive);if (it!=charStack.end())std::cout << "The first match is: " << *it << '\n';return 0;
}
  • Output
The first match is: A
The first match is: a

std::find_last_of

定义

size_type find_last_of( const basic_string& str,size_type pos = npos ) const;size_type find_last_of( CharT ch, size_type pos = npos ) const;

说明

查找与给定字符序列中的某个字符相等的最后一个字符。具体的搜索算法未指定。搜索仅考虑范围[0, pos]。如果在该范围内不存在给定字符序列中的任何字符,则返回npos。

例子

#include <iostream>
#include <string>int main()
{const std::string path = "/root/config";auto const pos = path.find_last_of('/');  // pos = 5const auto leaf = path.substr(pos + 1);   // pos + 1 = 6std::cout << leaf << '\n';
}
  • Output
config

Leetcode 345.反转字符串中的元音字母

给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。

元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现不止一次。

示例 1:

输入:s = “IceCreAm”

输出:“AceCreIm”

解释:

s 中的元音是 [‘I’, ‘e’, ‘e’, ‘A’]。反转这些元音,s 变为 “AceCreIm”.

示例 2:

输入:s = “leetcode”

输出:“leotcede”

提示:

1 <= s.length <= 3 * 105
s 由 可打印的 ASCII 字符组成


class Solution {
public:string reverseVowels(string s) {int left=0,right=s.size()-1;while(left<right){left=s.find_first_of("aeiouAEIOU",left);right=s.find_last_of("aeiouAEIOU",right);if(left<right){swap(s[left++],s[right--]);}}return s;}
};

输入:s = “IceCreAm”
输出:“AceCreIm”

http://www.dtcms.com/a/432276.html

相关文章:

  • 网站空间可以自己买吗wordpress4.9免登陆发布接口
  • 网站建设的行业资讯广西钦州有人帮做网站的公司吗
  • wordpress调用文件上传网络优化工作应该怎么做
  • 网站托管服务国家信息企业网查询
  • 解决 Windows 11 “找不到 gpedit.msc” 问题的方法
  • 网站建设饱和了吗最好的wordpress博客主题
  • TCP粘包和拆包问题
  • C#基础04-基础语法
  • 网站建设期间工作软文营销方法有哪些
  • 网站登陆注册怎么做宁波seo整站优化软件
  • 网站在互联网营销中的作用互联网相关网站
  • Easyx使用(中篇)
  • 省品牌建设联合会网站平面设计图片创意手绘
  • 山西教育学会网站建设网站搭建推广优化
  • 移动端开发平台海南百度推广seo
  • 网站建设与维护的国家定价标准淄博专业网站建设公司
  • 网站设计用什么字体网站商城系统建设方案
  • 广东省农业农村厅彭彬湛江网站优化快速排名
  • 亚马逊品牌注册网站建设建设银行怎么从网站上改手机号码
  • 上海建站模板源码个人简历模板免费下
  • 现在c 做网站用什么软件vps安装wordpress
  • 中国移动深圳有限公司门户网站seo怎么做优化排名
  • 外国购物网站设计风格wordpress头部导航栏代码
  • 互联网金融p2p网站建设模板万装网装修平台
  • 做外单都有什么网站网站建公司简介
  • 正规网站制作全包企业网站如何去做优化
  • 太仓网站制作网站建设网站首页栏目设置
  • aspnet网站开发教程数据库常州快速建站模板
  • 【算法竞赛学习笔记】基础算法篇:递归再探
  • 杭州门户网站建设工信部网站备案怎么查询