做题记录:牛客习题:单词识别

        相关题目代码已经提交到gitee中:楼田莉子 (riko-lou-tian) - Gitee.com喜欢请点个赞谢谢

目录

题目:

C++ 字符函数头文件

头文件:(C++ 标准库)

核心函数功能说明:

getline函数

1. std::getline (来自 )

2. istream::getline (来自 )

仿函数

        仿函数的使用

        带状态的仿函数

        多参数的仿函数

        仿函数的实际应用举例(自定义排序)


题目:

        做题思路:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include<vector>
#include<map>
#include<string>
#include<algorithm>
#include <cctype>  // 添加头文件以使用 tolower 函数
using namespace std;
typedef pair<string, int> Word;
//仿函数
bool cmp(Word w1, Word w2)
{return w1.second > w2.second;
}
int main()
{map<string, int>mp;// 使用map存储单词及其出现次数string s;while (getline(cin, s)){// std::getline (来自 <string>)// 主要作用:从输入流中读取一行文本并存储到 std::string 对象中for (int i = 0, j = 0; i < s.size(); i++){// 遇到分隔符(空格/句号)或字符串结尾时处理单词if (s[i] == ' ' || s[i] == '.'){string t = s.substr(j, i - j);if (isupper(t[0]))//将单词的首字母转为小写t[0] = tolower(t[0]);j = i + 1;//更新起始位置mp[t]++;//更新出现次数}}vector<Word>v(mp.begin(), mp.end());//将单词和出现次数存入vectorsort(v.begin(), v.end(), cmp);//按出现次数从多到少排序for (int i = 0; i < v.size(); i++)//按字典序输出单词和出现次数cout << v[i].first << ":" << v[i].second << endl;}return 0;
}

        扩充知识:

C++ 字符函数头文件<cctype>

在 C++ 中,isupper 和 tolower 函数都来源于 <cctype> 头文件(或 C 风格的 <ctype.h>)。以下是详细说明:


头文件:<cctype>(C++ 标准库)

作用:提供字符分类和转换函数,用于处理单字节字符(ASCII 字符集)

核心函数功能说明:
函数原型功能描述返回值
int isupper(int ch)检测字符 ch 是否为大写字母(A-Z)非零值(true)如果是;0(false)如果不是
int tolower(int ch)若 ch 是大写字母,则返回对应小写字母;否则返回原始值转换后的字符(int 类型)
int islower(int ch)检测字符 ch 是否为小写字母(a-z)非零值(true)如果是;0(false)如果不是
int toupper(int ch)若 ch 是小写字母,则返回对应大写字母;否则返回原始值转换后的字符(int 类型)
int isalpha(int ch)检测字符 ch 是否为字母(A-Z 或 a-z)非零值如果是;0 如果不是
int isdigit(int ch)检测字符 ch 是否为数字(0-9)非零值如果是;0 如果不是
int isalnum(int ch)检测字符 ch 是否为字母或数字(等价于 isalpha || isdigit非零值如果是;0 如果不是
int isspace(int ch)检测字符 ch 是否为空白字符(空格、制表符 \t、换行符 \n 等)非零值如果是;0 如果不是
int iscntrl(int ch)检测字符 ch 是否为控制字符(ASCII 0-31 及 127)非零值如果是;0 如果不是
int ispunct(int ch)检测字符 ch 是否为标点符号(非字母、数字、空白的可打印字符,如 !.非零值如果是;0 如果不是
int isprint(int ch)检测字符 ch 是否为可打印字符(包括空格)非零值如果是;0 如果不是
int isgraph(int ch)检测字符 ch 是否为图形字符(可打印字符,不包括空格)非零值如果是
  1. 参数类型

    • 所有函数接受 int 类型参数(实际是字符的 ASCII 值)

    • 传入的整数必须在 0~255 或 EOF(-1)范围内

  2. 返回值

    • 分类函数(如 isupper)返回 非零值(通常为 1)表示真0 表示假

    • 转换函数(如 tolower)返回转换后的 ASCII 值(需显式转换回 char

getline函数

        

在 C++ 中,getline 函数有两个主要版本,分别来自不同的头文件:

  1. std::getline (用于 std::string)
    来源于:<string> 头文件

  2. istream::getline (用于 C 风格字符串)
    来源于:<iostream> 头文件(作为 istream 类的成员函数)

1. std::getline (来自 <string>)

主要作用:从输入流中读取一行文本并存储到 std::string 对象中

核心功能

  • 从输入流读取字符直到遇到分隔符(默认换行符)

  • 将读取的内容存储到 string 对象中(不包括分隔符)

  • 自动处理内存分配,无需担心缓冲区大小

  • 分隔符会被从流中移除但不存储

2. istream::getline (来自 <iostream>)

主要作用:从输入流中读取一行文本并存储到 C 风格字符数组中

核心功能

  • 从输入流读取字符直到遇到分隔符或读取了 count-1 个字符

  • 在读取的字符串末尾添加空终止符 '\0'

  • 分隔符会被提取但不存储到缓冲区

  • 需要预先分配足够大的字符数组

特性std::getline (来自 <string>)istream::getline (来自 <iostream>)
目标类型std::stringC 风格字符数组
内存管理自动手动(需预分配缓冲区)
安全性高(无缓冲区溢出风险)低(可能缓冲区溢出)
最大长度无限制(仅受内存限制)受缓冲区大小限制
使用便捷性
推荐场景大多数现代 C++ 代码遗留代码或特定性能需求

getline 是 C++ 中处理文本输入的核心函数:

  • <string> 版本:现代 C++ 首选,安全方便,配合 std::string 使用

  • <iostream> 版本:适用于 C 风格字符串或特定性能场景

  • 关键优势:正确处理整行输入,包括空格和特殊字符

  • 常见应用:文件处理、用户输入、数据解析

  • 注意要点:缓冲区管理、输入流状态处理、换行符处理

仿函数

        本题中我们应用了仿函数,前面我们知道仿函数就是重载了运算符的类对象,类似于函数,因此叫仿函数

class FunctorName {
public:// 函数调用运算符重载return_type operator()(parameter_list) const; // 常成员函数版本return_type operator()(parameter_list);       // 非常成员函数版本
};

原型要素解析

组成部分说明
operator()必须重载的操作符
return_type仿函数的返回值类型
parameter_list参数列表(可为空)
const修饰符声明为const成员函数,表示不修改对象状态

        仿函数的使用

        基本使用:

#include <iostream>// 定义仿函数
class Square
{
public:int operator()(int x) const // const版本{ return x * x;}
};int main() 
{Square square;      // 创建仿函数对象int result = square(5); // 调用仿函数std::cout << "5 squared: " << result; // 输出25return 0;
}

        带状态的仿函数

class Accumulator 
{int total = 0; // 内部状态
public:int operator()(int value) {total += value;return total;}void reset() { total = 0; }
};int main() 
{Accumulator acc;std::cout << acc(10) << "\n"; // 10std::cout << acc(20) << "\n"; // 30std::cout << acc(5) << "\n";  // 35acc.reset();std::cout << acc(100); // 100return 0;
}

        多参数的仿函数

class RangeChecker 
{int min, max;
public:RangeChecker(int low, int high) : min(low), max(high) {}bool operator()(int value) const {return value >= min && value <= max;}
};int main() 
{RangeChecker inRange(10, 20);std::cout << "15 in range? " << inRange(15) << "\n"; // truestd::cout << "25 in range? " << inRange(25);        // falsereturn 0;
}

        仿函数的实际应用举例(自定义排序)

#include <algorithm>
#include <vector>// 按字符串长度排序
class LengthComparator 
{
public:bool operator()(const std::string& a, const std::string& b) const {return a.size() < b.size();}
};int main() 
{std::vector<std::string> words = { "apple", "banana", "kiwi", "orange" };// 使用仿函数排序std::sort(words.begin(), words.end(), LengthComparator());// 输出:kiwi apple banana orangefor (const auto& word : words)std::cout << word << " ";return 0;
}

        本篇内容就到这里了,喜欢请点个赞谢谢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92580.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92580.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92580.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从免费到盈利:Coze智能体1小时封装变现全流程指南——井云科技

在AI技术普惠的浪潮下&#xff0c;Coze等智能体平台让零代码开发者也能快速构建功能强大的AI助手。然而&#xff0c;许多创作者在完成智能体开发后&#xff0c;却面临“工具免费、成本自担”的困境——用户无限制调用导致算力成本飙升&#xff0c;想收费又缺乏成熟的支付与用户…

C++学习之STL学习:map/set

通过前面的学习&#xff0c;我们已经对C STL有了初步了解。然而&#xff0c;STL作为一个庞大复杂的体系&#xff0c;远不止这些内容。接下来&#xff0c;我们将深入探讨STL中的另外两个重要组件——map和set。 作者的个人gitee&#xff1a;楼田莉子 (riko-lou-tian) - Gitee.co…

[学习] CORDIC算法详解:从数学原理到反正切计算实战

CORDIC算法详解&#xff1a;从数学原理到反正切计算实战 文章目录CORDIC算法详解&#xff1a;从数学原理到反正切计算实战引言一、数学原理二、求解流程&#xff08;旋转模式&#xff09;三、典型应用场景四、反正切计算示例&#xff08;Python实现&#xff09;五、算法流程可视…

3款强力的Windows系统软件卸载工具

1、Geek 下载地址&#xff1a;https://download.csdn.net/download/weixin_42203093/91625765 Geek Uninstaller 是一款专业的 Windows 软件卸载工具&#xff0c;主要用于卸载软件并清理残留垃圾&#xff1a; 特点 体积小巧便携&#xff1a;软件体积约为 1.7M&#xff0c;是单…

AcWing 4579. 相遇问题

这道题做个今天的结尾 比较简单 正在备战csp吗&#xff0c;正好刷一下 难度&#xff1a;简单时/空限制&#xff1a;1s / 256MB总通过数&#xff1a;1738总尝试数&#xff1a;2584来源&#xff1a; CSP-J 2022 模拟赛 原题链接 4579. 相遇问题 - AcWing题库 题目描述 一…

基于clodop和Chrome原生打印的标签实现方法与性能对比

今天想看看&#xff0c;基于clodop和Chrome原生打印的标签实现方法与性能对比。先看看DeepSeek关于这个问题的回答&#xff01; CloudPrint 和 Chrome 原生打印的区别 基本概念差异 CloudPrint (Clodop) 是基于云的打印服务解决方案需要安装专门的客户端程序支持跨平台、跨设备…

百度网盘如何做到下载速度最快?OpenSpeedy绿色安装版下载,开源免费网盘加速

下载地址获取点击这里打开&#xff1a;OpenSpeedy下载地址 打开解压后的文件夹&#xff0c;找到【OpenSpeedy.exe】应用程序&#xff0c;右键选择【以管理员身份运行】。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 主要特性&#xff1a; 免费开源蛮…

科技云报到:热链路革命:阿卡 CRM 的 GTM 定位突围

科技云报道原创。在企业数字化的工具箱里&#xff0c;“CRM” 一词早已不是 “全流程客户管理” 的代名词&#xff0c;而是从营销获客到客户信息沉淀&#xff0c;再到长期关系维护&#xff0c;仿佛要包揽从线索到复购的所有环节。但成立仅两年半的阿卡 CRM&#xff0c;却在实践…

什么是Graphical Abstract

什么是Graphical Abstract 现在都需要用Graphical Abstract&#xff0c;新加的好像。图形摘要&#xff08;Graphical Abstract&#xff09;是学术论文中一种以可视化方式浓缩呈现研究核心内容的图表&#xff0c;它通过简洁的图形、流程图、示意图或组合视觉元素&#xff0c;直观…

心灵笔记:正念冥想

定义&#xff1a;正念冥想&#xff08;Mindfulness Meditation&#xff09;是一种源自东方禅修、结合现代心理学的心理训练方法&#xff0c;核心是有意识地将注意力集中在当下的体验上&#xff0c;不加评判地觉察自身的 thoughts&#xff08;想法&#xff09;、feelings&#x…

微软推出革命性AI安全工具Project IRE,重塑网络安全防御新范式

面对日益复杂的网络安全威胁&#xff0c;微软近日发布了具有里程碑意义的Project IRE AI工具。这项创新性解决方案将人工智能与逆向工程技术深度融合&#xff0c;开创了自动化威胁检测的新纪元。据微软官方披露&#xff0c;该工具能够在不依赖人工干预的情况下&#xff0c;自主…

C#Attribute(特性)的定义与使用

1.什么是 Attribute1.1 定义 Attribute 是一种“声明式元数据&#xff08;declarative metadata&#xff09;”机制。 • 附加位置&#xff1a;程序集、模块、类型、字段、属性、方法、方法参数、方法返回值、事件、泛型参数、局部变量、本地函数、Lambda 表达式、甚至表达式树…

飞书对接E签宝完整方案

1、概述飞书和E签宝在各自领域都属于领先的产品&#xff0c;但因为E签宝与钉钉的特殊关系&#xff0c;一直以来E签宝都只实现了与钉钉的深度集成&#xff0c;一家企业如果想同时使用飞书和E签宝&#xff0c;则需要通过S-HUB这样的产品来进行桥接&#xff0c;用户在飞书端审批&a…

Mysql快速导出数据库设计说明书word文档(表结构、类型、注释、是否有主键)

主要有三种方式&#xff0c;根据你的需求来选择&#xff1a; 1、Mysql语句查询 优点&#xff1a;无需安装额外的软件&#xff0c;使用你常用的数据库可视化工具即可 缺点&#xff1a;受限于你的数据库可视化工具的导出功能&#xff0c;需要额外写脚本进行处理 2、Python脚本…

DigitalProductId解密算法php调试版piddebug.php

<?php // 使用数组字面量 $digits [B, C, D, F, G, H, J, K, M, P, Q, R,T, V, W, X, Y, 2, 3, 4, 6, 7, 8, 9]; //foreach ($digits as $digit) { // echo $digit."<br>"; //}$hexPidarray(0xc2,0x49,0x4b,0xcc,0x60,0x34,0x09,0xcd,0x96,0xf7,0xec,0…

IDEA快捷键壁纸分享

说明&#xff08;1&#xff09;因为显示器的尺寸不同&#xff0c;对快捷键显示的位置稍作调整 &#xff08;2&#xff09;这里默认您熟悉常用的快捷键&#xff0c;分享一些功能好用但是用的少的快捷键空壁纸笔记本壁纸&#xff08;15.6寸&#xff09;24 寸显示器壁纸

InnoDB vs MyISAM: MySQL存储引擎的世纪对决

选错存储引擎&#xff1f;你的数据库性能可能暴跌80%&#xff01; 本文用最直观的对比拆解MySQL两大核心存储引擎的差异&#xff0c;让你彻底明白什么场景该选谁。一、引擎全景图: 数据库的"心脏"之争 ❤️ #mermaid-svg-KTQko8kEUvOkTb4L {font-family:"trebuc…

【Avalonia】无开发者账号使用iOS真机调试跨平台应用

文章目录1. 要求1.1 无需Apple开发者账号1.2 最新版mac系统1.3 最新版Xcode2. 配对Mac3. 配置开发证书3.1 创建一个名为MTClient的Xcode项目3.2 找到签名证书3.3 配置签名3.4 配置标识符4. 真机调试4.1 设置应用首屏 Launch Screen4.2 设置应用图标5. 问题5.1 DI异常该问题的解…

【LLM实战|langchain】langchain基础

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 【LLM实战|langchain】langchain基础 1. 模型 I/O 封装 把不同的模型&#xff0c;统一封装成一个接口&#xff0c;方便更换模型而不用重构代码。 1.1 …

十九、MySQL-DQL-基本查询

基本查询代码&#xff1a;DQL:基本查询 1.查询指定字段 name,entrydate 并返回 -- 1.查询指定字段 name,entrydate 并返回 select name,entrydate from tb_emp;2.查询返回所有字段 -- 2.查询返回所有字段 -- 推荐 select id, username, password, name, gender, image, job, e…