珠海网站建设开发/互联网培训班学费多少

珠海网站建设开发,互联网培训班学费多少,网站中的滑动栏怎么做,做模板网站怎么放视频教程单词个数统计 原作: 输入: 一行字符串。仅有空格和英文字母构成。 输出: 英文字母个数letter_num 单词个数word_num 出现最多的字母max_letter 出现最多的字母的出现次数max_letter_frequ 处理: 统计并输出此句子英文字母…

单词个数统计

原作:

输入: 一行字符串。仅有空格和英文字母构成。

输出:

英文字母个数letter_num

单词个数word_num

出现最多的字母max_letter

出现最多的字母的出现次数max_letter_frequ

处理:

  1. 统计并输出此句子英文字母的个数;

  2. 统计并输出此句子中单词的个数;

  3. 查找此句子中出现次数最多的字母(不区分大小写,大小写字母是相同的)及次数。当出现最多的字母不止一个时,全部找到,并输出找到的所有字母及次数。(输出顺序按字母顺序,且输出时字母全部小写)

int main() {//输入:一行字符串。仅有空格和英文字母构成。 char arr[1024];string s;fgets(arr, sizeof(arr), stdin);s = arr;//英文字母个数int letter_num = 0;//单词的个数int word_num = 0;map<char,int> myMap;//处理//统计并输出此句子英文字母的个数for (int i = 0; i < s.size(); i++) {if (s[i] != ' ') {letter_num++;//将s[i]统一转成小写if (s[i] >= 'A' && s[i] <= 'Z') {s[i] += 32;}myMap[s[i]]++;if (s[i] == ' ' && s[i + 1] != ' ') {word_num++;}}}//输出:英文字母的个数printf("%d\n", letter_num);//输出:单词的个数printf("%d\n", word_num);//输出:出现次数最多的字母map<char,int>::iterator it;
​//找到字母出现的最多次数int max = 0;for (it=myMap.begin(); it != myMap.end(); it++) {if (it->second > max) {max = it->second;}}//找到值为max的所有键vector<char>max_letters;for (it = myMap.begin(); it != myMap.end(); it++) {if (it->second == max) {max_letters.push_back(it->first);}}//打印输出max_letters数组中的值for (int i = 0; i < max_letters.size(); i++) {printf("%d ", max_letters[i]);}printf("\n");return 0;
}

代码分析

上述代码存在几处的错误,我们来解释一下:

1.输入语句发生错误:

scanf("%s", arr);

%s 读取遇到空格就结束了,所以无法读入整行句子。句子有空格的话,后面的内容根本读不到。

应改为:

fgets(arr, sizeof(arr), stdin);

2.英文字母个数,单词个数统计错误:

按照上面的写法, 会把非空格的字符都算进去,但题目要求只统计英文字母个数。 即 如果 s[i] 是换行符 \n,也会被统计进去。

正确的改法应该是:

if ( (s[i] >= 'A' && s[i] <= 'Z') || (s[i] >= 'a' && s[i] <= 'z') ) {letter_num++;
}

或者用 isalpha(s[i])。 isalpha() 是标准C库函数,作用是判断字符是否为英文字母(A-Z,a-z)。

对于统计单词个数:你要使用上述的这个语句来统计单词个数,得先去掉开头和结尾的空格。

或者推荐使用下列的做法:

bool in_word = false;
for (int i = 0; i < s.size(); i++) {if (isalpha(s[i])) {if (!in_word) {word_num++;in_word = true;}} else if (s[i] == ' ') {in_word = false;}
}

正确代码

#define  _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include <stdio.h>
#include<string>
#include<vector>
#include<map>
​
using namespace std;
​
int main() {//输入:一行字符串。仅有空格和英文字母构成。 char arr[1024];string s;fgets(arr, sizeof(arr), stdin);s = arr;//英文字母个数int letter_num = 0;//单词的个数int word_num = 0;map<char,int> myMap;//处理//统计并输出此句子英文字母,单词的个数bool in_word = false;//标记是否在单词中for (int i = 0; i < s.size(); i++) {if (isalpha(s[i])) {letter_num++;//统一转成小写,再加入myMapchar ch = tolower(s[i]);myMap[ch]++;//再统计单词if (!in_word) {word_num++;in_word = true;}}else if (s[i] == ' ') {in_word = false;//遇到空格说明单词结束}}//输出:英文字母的个数printf("%d\n", letter_num);//输出:单词的个数printf("%d\n", word_num);//输出:出现次数最多的字母map<char,int>::iterator it;
​//找到字母出现的最多次数int max = 0;for (it=myMap.begin(); it != myMap.end(); it++) {if (it->second > max) {max = it->second;}}//找到值为max的所有键vector<char>max_letters;for (it = myMap.begin(); it != myMap.end(); it++) {if (it->second == max) {max_letters.push_back(it->first);}}//打印输出max_letters数组中的值for (int i = 0; i < max_letters.size(); i++) {printf("%c ", max_letters[i]);}printf("\n");//打印输出出现最多的字母的出现次数printf("%d\n", max);return 0;
}

浮点数加法

原作:

输入:有2行,分别表示两个加数num1 num2

输出: 一个小数部分不为0的浮点数

处理: 求2个浮点数相加的和

思路:

我们要运算的数已经超过了浮点数精度,称此类问题为高精度计算。

此题给的两个数都超过了float和double的精度,所以我们可以把他们表示为两个字符串,进行运算。

我们要做的实际上就是用字符串模拟小学时学的竖式计算。

1)对齐:把小数点的位置对齐

2)先计算右边的小数,即进行小数运算

3)再进行左边的整数,即进行整数运算

对于运算的过程:从右往左算,且计算的是a+b+进位(carry)%10

对于整数的运算,因为两个加数的位数可能不一样,所以我们要实现i,j分别指向两个加数,我们运算的结束条件是,a没访问完或者b没访问完或者carry==1(即可能存在两个都访问完了,但还有进位的情况,例如11+99,在11和99的岗位都访问完了,还要向前再加一位)

#define  _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include <stdio.h>
#include<string>
using namespace std;
/*
参数:一个字符串a
返回值:a的整数部分
处理:提取a的整数部分
*/
string GetInteger(string a) {return a.substr(0, a.find('.'));
}
//提取a的小数部分
string GetFraction(string a) {return a.substr(a.find('.') + 1);
}
​
/*
处理:获取小数计算的结果,已经最终的进位
因为返回值只能返回一个,我们要两个结果,故我们都使用引用进行传递。
*/
void FractionPlus(string& res, int& carry, string fa, string fb) {
​int size = max(fa.size(), fb.size());while (fa.size() < fb.size()) {fa.push_back('0');}while (fb.size() < fa.size()) {fb.push_back('0');}//开始运算res.resize(size);//给res申请内存空间carry = 0;for (int i = size - 1; i >= 0; i--) {//'0'='0'//'3'='0'+'3'if (fa[i] + fb[i] + carry - '0' > '9') {res[i] = fa[i] + fb[i] +carry- '0' - 10;carry = 1;}else {res[i] = fa[i] + fb[i] + carry - '0';carry = 0;}}return;
}
/*
进行整数运算,整数加法运算不需要修改进位值,只需要获取小数运算得到的
进位值
*/
void IntegerPlus(string& res, int carry, string ia,string ib) {res.clear();for (int i = ia.size() - 1, j = ib.size() - 1; i >= 0 || j >= 0 || carry == 1; --i, --j) {//a,b都还没访问完if (i >= 0 && j >= 0) {if (ia[i] + ib[j] + carry - '0' > '9') {//结果要插入到上一个结果的前面res.insert(res.begin(), ia[i] + ib[j] + carry - '0' - 10);carry = 1;}else {res.insert(res.begin(), ia[i] + ib[j] + carry - '0');carry = 0;}//只有a的情况           }else if (i >= 0 &&j < 0) {if (ia[i] + carry > '9') {//结果要插入到上一个结果的前面res.insert(res.begin(), ia[i] + carry - 10);carry = 1;}else {res.insert(res.begin(), ia[i] + carry);carry = 0;}}else if (i < 0 && j >= 0) {//只有b的情况 if (ib[j] + carry > '9') {//结果要插入到上一个结果的前面res.insert(res.begin(), ib[j] + carry - 10);carry = 1;}else {res.insert(res.begin(), ib[j] + carry);carry = 0;}}else { //只有进位res.insert(res.begin(), '1');carry = 0;}}}
​
​
int main() {string a;string b;char arr1[1024];char arr2[1024];while (scanf("%s%s", arr1, arr2) != EOF) {a = arr1;b = arr2;string ia = GetInteger(a);string ib = GetInteger(b);string fa = GetFraction(a);string fb = GetFraction(b);string fres;int carry;FractionPlus(fres, carry, fa, fb);string ires;IntegerPlus(ires, carry, ia, ib);string result = ires + '.' + fres;printf("%s\n", result.c_str());}return 0;
}

代码分析

以上代码有一些语法值得我们再次复习。

1.字符串操作

a.find('.');//找到字符串中第一次出现 . 的位置,返回下标。如果找不到,返回 string::npos
a.substr(0, pos)//从下标 0 开始,截取 pos 长度的子串

2.max() 是 C++ 标准库 <algorithm > 中的函数,用来返回两个值中的较大值。

知识点

将大写字母转为小写字母的方式

用tolower() 或者使用ASCII码

tolower() 是 C 标准库 里的函数

#include <cctype>
​
char lower = tolower('A'); // 结果是 'a'
​

在 ASCII 表中:

  • 大写字母 'A''Z' 的值是 65 ~ 90

  • 小写字母 'a''z' 的值是 97 ~ 122

  • 大小写之间的差值是 32

if (ch >= 'A' && ch <= 'Z') {ch += 32;
}

字符形式进行十进制运算的原理

现在我们想以字符形式进行十进制运算。

字符 '0' ~ '9' 在 ASCII 表中对应十进制数值 48~57。故 '3' + '6' = 51 + 54 = 105;在十进制运算中3 + 6 = 9;显然,9的ASCII码不是105,故我们不能简单的将两个字符相加来实现。那该怎么办?

==》因为字符和十进制数字的关系有字符 - '0' = 对应的十进制数字

如果你要对两个字符表示的数字相加(模拟竖式加法),你需要先把它们转换成数字再相加:

('3' - '0') + ('6' - '0') = 3 + 6 = 9

在上面的案例中,你可以看作 fa[i] - '0' 得到数字,fb[i] - '0' 得到数字,

然后数字相加,最后 + '0' 变回字符存进 res[i]

所以我们可以直接合并表示为fa[i] + fb[i] + carry - '0'

另外为什么可以与'9'表示,因为fa[i] + fb[i] + carry - '0' 这个结果是字符形式的,而在字符表示下:最大个位数字是 '9'(ASCII 57),如果 这个结果大于'9',也就对应了数字运算中的结果大于9,也就是竖式加法里的“要进位”条件。

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

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

相关文章

解决火绒启动时,报安全服务异常,无法保障计算机安全

1.找到控制面板-安全和维护-更改用户账户控制设置 重启启动电脑解决。

python总结(1)

数据结构是以某种方式(如通过编号)组合起来的数据元素(如数、字符乃至其他数据结构)集合。在Python中&#xff0c;最基本的数据结构为序列(sequence)。序列中的每个元素都有编号&#xff0c;即其位置或索引&#xff0c;其中第一个元素的索引为0&#xff0c;第二个元素的索引为1…

NAT NAPT

NAT NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09; 主要用于在不同网络&#xff08;如私有网络和公共互联网&#xff09;之间进行 IP 地址转换&#xff0c;解决IP 地址短缺问题&#xff0c;并提供一定的安全性。 IPv4 地址是 32 位&#xf…

快速排序(二叉树的前序递归遍历思想)

思路 之前我们从选择排序&#xff0c;到选择排序的稳定性优化&#xff0c;到冒泡排序&#xff0c;到插入排序&#xff0c;到插入排序的提前截止时间&#xff0c;到希尔排序&#xff0c;虽然逐步一直都在优化&#xff0c;但是时间复杂度还是N得平方&#xff0c;力扣提交的结果一…

Redis 面试篇

Redis相关面试题 缓存三剑客 面试官&#xff1a;什么是缓存穿透 ? 怎么解决 ? 缓存穿透是指查询一个一定不存在的数据&#xff0c;如果从存储层查不到数据则不写入缓存&#xff0c;这将导致这个不存在的数据每次请求都要到 DB 去查询&#xff0c;可能导致 DB 挂掉。这种情况…

群晖DS223 Docker搭建为知笔记

群晖DS223 Docker搭建为知笔记&#xff0c;打造你的专属知识宝库 一、引言 在数字化信息爆炸的时代&#xff0c;笔记软件成为了我们管理知识、记录灵感的得力助手。为知笔记&#xff0c;作为一款专注于工作笔记和团队协作的云笔记产品&#xff0c;以其丰富的功能和便捷的使用体…

Linux网络之数据链路层协议

目录 数据链路层 MAC地址与IP地址 数据帧 ARP协议 NAT技术 代理服务器 正向代理 反向代理 上期我们学习了网络层中的相关协议&#xff0c;为IP协议。IP协议通过报头中的目的IP地址告知了数据最终要传送的目的主机的IP地址&#xff0c;从而指引了数据在网络中的一步…

分类评价指标

基础概念解释 TP、TN、FP、FN 这里T是True&#xff0c;F是False&#xff0c;P为Positive&#xff0c;N为Negative TP&#xff1a;被模型正确地预测为正样本&#xff08;原本为正样本&#xff0c;预测为正样本&#xff09; TN&#xff1a;被模型正确地预测为负样本&#xff0…

江科大51单片机笔记【11】AT24C02(I2C总线)

一、存储器 1.介绍 RAM的特点是存储速度特别快&#xff0c;但是掉电会丢失&#xff1b;ROM的特点是存储速度特别慢&#xff0c;但是掉电不会丢失 SRAM是所有存储器最快的&#xff0c;一般用于电脑的CPU高速缓存&#xff0c;容量相对较少&#xff0c;成本较高&#xff1b;DRAM…

【C++指南】一文总结C++类和对象【中】

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C类和对象的语法知识。注意&#xff1a;在本章节中&#xff0c;小编会以Date类举例 &#x1f44d; 如果觉得…

文本转语音-音画适时推送rtsp并播放

文本语音 rtsp适时播放叫号系统的底层逻辑 发布Linux, unix socket 和window win32做为音频源的 python10下的(ffmpeg version 7.1) 可运行版本. 这两天在弄这个&#xff0c;前2篇是通过虚拟声卡&#xff0c;达到了最简单的一个逻辑&#xff0c;播放文本就从声卡发声&#xff0…

从0开始的操作系统手搓教程33:挂载我们的文件系统

目录 代码实现 添加到初始化上 上电看现象 挂载分区可能是一些朋友不理解的——实际上挂载就是将我们的文件系统封装好了的设备&#xff08;硬盘啊&#xff0c;SD卡啊&#xff0c;U盘啊等等&#xff09;&#xff0c;挂到我们的默认分区路径下。这样我们就能访问到了&#xff…

【图片批量转换合并PDF】多个文件夹的图片以文件夹为单位批量合并成一个PDF,基于wpf的实现方案

项目背景: 多个图片分布在不同文件夹,如何以文件夹为单位批量合并成一个PDF,还要保证文件夹里面图片大小和顺序 实现功能: 1、单张图片的转换PDF:一张图临时转一下 2、多张图片转换成PDF:多张图单独转成PDF 3、多级目录多张图转换成PDF:多级目录多张图单独转成多个PDF…

如何用Kimi生成PPT?秒出PPT更高效!

做PPT是不是总是让你头疼&#xff1f;&#x1f629; 快速制作出专业的PPT&#xff0c;今天我们要推荐两款超级好用的AI工具——Kimi 和 秒出PPT&#xff01;我们来看看哪一款更适合你吧&#xff01;&#x1f680; &#x1f947; Kimi&#xff1a;让PPT制作更轻松 Kimi的生成效…

从 MongoDB 到 TDengine,沃太能源实现 18 倍写入性能提升

导读 沃太能源是国内领先储能设备生产厂商&#xff0c;数十万储能终端遍布世界各地。此前使用 MongoDB 存储时序数据&#xff0c;但随着设备测点增加&#xff0c;MongoDB 在存储效率、写入性能、查询性能等方面暴露出短板。经过对比&#xff0c;沃太能源选择了专业时序数据库 …

数据库基本建表操作

1.登录数据库并创建数据库db_ck 创建完成后使用到我们创建的数据库。 2.创建表t_hero 根据hero属性包括&#xff08;id&#xff0c;name&#xff0c;nickname&#xff0c;age&#xff0c;gender&#xff0c;address&#xff0c;weapon&#xff0c;types&#xff09; 创建完…

QwQ-32B 开源!本地部署+微调教程来了

今天&#xff0c;通义千问开源了推理模型QwQ-32B QwQ-32B 在一系列基准测试中进行了评估&#xff0c;测试了数学推理、编程能力和通用能力。以下结果展示了 QwQ-32B 与其他领先模型的性能对比&#xff0c;包括 DeepSeek-R1-Distilled-Qwen-32B、DeepSeek-R1-Distilled-Llama-7…

如何利用 Excel 表格实现精准文件批量重命名教程

在处理大量文件时&#xff0c;有时需要根据特定规则对文件名进行调整。如果您的文件名和新名称之间存在一对多的关系&#xff0c;并且这种关系可以通过 Excel 表格来管理&#xff0c;那么使用“简鹿文件批量重命名”软件中的“匹配对应名称命名”功能将是一个高效的选择。接下来…

开关模式电源转换器 EMI/EMC 的集成仿真

介绍 在电力电子领域&#xff0c;电磁干扰 &#xff08;EMI&#xff09; 和电磁兼容性 &#xff08;EMC&#xff09; 问题可以决定设计的成败。开关模式电源转换器虽然高效且紧凑&#xff0c;但却是电磁噪声的常见来源&#xff0c;可能会对附近的组件和系统造成严重破坏。随着…

PostgreSQL_安装部署

一、Windows系统下安装 1.下载安装包 登录PostgreSQL: Downloads官网&#xff1a; 选择14.12版本&#xff0c;点击下载&#xff1a; 2.安装PostgrSQL14.12 双击exe安装包程序&#xff0c;准备安装&#xff1a; 选择安装路径&#xff1a; 选择想安装的工具&#xff1a; 选择数…