王道机试C++第 4 章 字符串:字符串内容续写几个小程序 Day30

news2025/6/17 2:03:08

统计字符

习题描述

统计一个给定字符串中指定的字符出现的次数。

输入描述: 测试输入包含若干测试用例,每个测试用例包含2行,第1行为一个长度不超过5的字符串,第2行为一个长度不超过80的字符串。注意这里的字符串包含空格,即空格也可能是要求被统计的字符之一。当读到'#'时输入结束,相应的结果不要输出。

输出描述:对每个测试用例,统计第1行中字符串的每个字符在第2行字符串中出现的次数,按如下格式输出:c0 n0     c1 n1     c2 n2     ...     其中ci是第1行中第i个字符,ni是ci出现的次数。

思路提示:

法一:用普通方法循环寻找。

法二:首先用一个 number 数组记录所有字符出现的频率,然后按照要求进行结果的输出即可。

代码表示

法一:

#include <iostream>
using namespace std;

void count(string s1,string s2) {
    int cnt;
    for(int i = 0;i < s1.length(); i++) {
        cnt = 0;
        for(int j = 0;j < s2.length(); j++) {
            if(s1[i] == s2[j]) {
                cnt++;
            }
        }
        cout << s1[i] << ' ' << cnt << endl;
    }
 
    return ; 
}
 
int main() {
    string s1, s2;
    while(getline(cin, s1)) {
        if(s1[0] == '#') break;
        getline(cin, s2);
        count(s1, s2);
    }
    return 0;
}

注意:① 写一个循环函数需要设定不同的变量

② 要注意输入字符串的时候用到getline(cin, s1);getline()属于string流则相反,可以接收空格、也可以自定义结束标志它将从输人流中提取界定符,但不会把它存储到结果缓冲区中。

法二:

1、思路:

1)首先,使用 getline(cin, str2) 从输入中读取第二行字符串 str2

2)然后,使用一个 for 循环遍历 str2 的每个字符。在循环中,通过 str2[i] 访问当前字符。

3)在循环内部,使用 number[str2[i]]++ 将 str2[i] 对应的字符在 number 数组中的计数加 1。这行代码使用了数组下标访问,将当前字符作为索引,然后自增对应位置的计数器。

4)经过上述循环后,number 数组中存储了 str2 中每个字符出现的次数。

5)接下来,使用另一个 for 循环遍历第一行字符串 str1 中的每个字符。

6)在循环内部,使用 printf("%c %d\n", str1[i], number[str1[i]]) 输出当前字符及其在 str2 中的出现次数。str1[i] 表示当前字符,number[str1[i]] 表示该字符在 str2 中出现的次数。

2、memset(number, 0, sizeof(number)); 这行代码的作用是将 number 数组的所有元素都设置为 0,为后续的字符出现次数统计做初始化操作。这样,number 数组中的每个元素都表示对应字符在字符串中出现的次数,初始值为 0。

#include <iostream>
using namespace std;

int main() {
    string str1,str2;
    int num;
    while (getline(cin, str1)){
        if (str1== "#") {
            break;
        }
        getline(cin, str2);
        memset(number, 0, sizeof(number)); //初始化数组
        for (int i = 0; i < str2.size(); ++i) {
             number[str2[i]]++;
        }
        for (int i = 0; i < str1.size(); ++i) {
             printf("%c %d\n", str1[i], number[str1[i]]);
        }
    }
    return 0;
} 

字母统计

习题描述

输入一行字符串,计算其中A-Z大写字母出现的次数

输入描述:案例可能有多组,每个案例输入为一行字符串。

输出描述:对每个案例按A-Z的顺序输出其中大写字母出现的次数。

代码表示

法一:

#include <bits/stdc++.h>
using namespace std;

int main() {
    string str;
    int number[128]; // 存储字符出现次数的数组
    while (getline(cin, str)) {
        memset(number, 0, sizeof(number)); // 初始化数组

        for (int i = 0; i < str.size(); ++i) {
            number[str[i]]++; // 统计字符出现次数
        }
        for (char c = 'A'; c <= 'Z'; ++c) {
            cout << c << ":" << number[c] << endl; // 输出字符及其出现次数
        }
    }
    return 0;
}

法二:(正向)

#include <iostream>
#include <cstring>
using namespace std;

int number[26];

int main() {
    string str;
    while (cin >> str) {
        memset(number, 0, sizeof(number));
        for (int i = 0; i < str.size(); ++i) {
            if ('A' <= str[i] && str[i] <= 'Z') {
                number[str[i] - 'A']++;
            }
        }
        for (int i = 0; i < 26; ++i) {
            printf("%c:%d\n", 'A' + i, number[i]);
        }
    }
    return 0;
}

skew数

代码描述

在 skew binary 表示中,第 k 位的值 x[k] 表示 x[k]×(2^(k+1)-1)。每个位上的可能数字是 0 或 1,最后面一个非零位可以是 2;

例如,10120(skew) = 1×(2^5-1) + 0×(2^4-1) + 1×(2^3-1) + 2×(2^2-1) + 0×(2^1-1) = 31 + 0 + 7 + 6 + 0 = 44。前十个 skew 数是 0、1、2、10、11、12、20、100、101、以及 102。

输入描述:输入包括多组数据,每组数据包含一个 skew 数。

输出描述:对应每一组数据,输出相应的十进制形式。结果不超过 2^31-1。

代码表示

#include <bits/stdc++.h>
using namespace std;

int main(){
    string str;
//     int sum=0;
    while(getline(cin,str)){
        int sum=0;
        int j=str.size();//这个得在循环前设定值
        for(int i=0;i<str.size();++i){
            sum+=(str[i]-'0')*(pow(2,j)-1);
            --j;
        }
        printf("%d\n",sum);
    }
}

心得体会

1、sum+=(str[i]-'0')*(pow(2,j)-1); 是用来计算 skew 数的十进制值的关键部分。

1)(str[i]-'0'):这一部分是将字符类型的数字转换为相应的整数值。在 ASCII 编码中,字符 '0' 的值是 48,因此通过减去 '0',可以将字符类型的数字转换为相应的整数值。例如,字符 '0' 被转换为 0,字符 '1' 被转换为 1,以此类推。

2)pow(2,j):这里使用了 pow 函数来计算 2 的 j 次方。

2、int j=str.size(); 是在获取输入的 skew 数字符串的长度,并将其赋值给变量 j

在这段代码中,首先需要知道输入的 skew 数有多长,因为在计算 skew 数的十进制值时,需要根据每一位的位置计算相应的权重。因此,通过 str.size() 来获取输入字符串的长度,然后将其赋值给变量 j,以便在后续的循环中使用 j 来表示当前位数。

3、需要给两个变量 i 和 j

字符串从左边(最左侧)开始计数,第一个字符的下标为0,第二个字符的下标为1,以此类推。

例如,对于字符串 "Hello",它的字符下标如下所示:

字符: H e l l o 
下标: 0 1 2 3 4

4、pow(2, j) 表示计算 2 的 j 次幂,即求解 2 的 j 次方的值。在数学上,这个表达式等同于 2^j。 

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

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

相关文章

Unity性能优化篇(十) 模型优化之网格合并 Easy Mesh Combine Tool插件使用以及代码实现网格合并

把多个模型的网格合并为一个网格。可以使用自己写代码&#xff0c;使用Unity自带的CombineMeshes方法&#xff0c;也可以使用资源商店的插件&#xff0c;在资源商店搜Mesh Combine可以搜索到相关的插件&#xff0c;例如Easy Mesh Combine Tool等插件。 可大幅度减少Batches数量…

零、自然语言处理开篇

目录 0、NLP任务的基础——符号向量化 0.0 词袋模型 0.1 查表/One-hot编码 0.2 词嵌入模型/预训练模型 0.2.0 Word2Vec &#xff08;0&#xff09;CBOW &#xff08;1&#xff09;Skip-gram 0.2.1 GloVe 0.2.2 WordPiece 0.2.3 BERT 0.2.4 ERNIE NLP自然语言处理&am…

微信小程序-入门

1.下载和安装Npm&#xff1a;Npm https://docs.npmjs.com/downloading-and-installing-node-js-and-npm 或者 https://nodejs.org/en/download/ 未安装npm 提示 以下以安装node安装包为例 按任意键继续 安装完成后 2. 下载和安装小程序开发工具 &#xff1a;https:/…

@EnableWebMvc介绍和使用详细demo

EnableWebMvc是什么 EnableWebMvc 是 Spring MVC 中的一个注解&#xff0c;它用于启用 Spring MVC 框架的基本功能&#xff0c;以便你可以使用 Spring MVC 提供的特性来处理 Web 请求。 通常情况下&#xff0c;在基于 Spring Boot 的应用中&#xff0c;并不需要显式地使用 Ena…

音视频开发_音频基础知识

如何采集声音——模数转换原理 声音模数转换是将声音信号从模拟形式转换为数字形式的过程。它是数字声音处理的基础&#xff0c;常用于语音识别、音频编码等应用中。 音视频通信流程 音视频采集&#xff1a;首先是从麦克风、摄像头等设备中采集音频和视频数据&#xff0c;将现…

免费下载Corel Video Studio 2024-轻松创建令人惊叹的视频!

免费下载Corel Video Studio 2024-轻松创建令人惊叹的视频&#xff01; Corel Video Studio 2024免费下载Keygen 你厌倦了在视频编辑软件上花大钱吗&#xff1f;别再看了&#xff01;我们为您提供了完美的解决方案——Corel Video Studio 2024。最棒的部分是什么&#xff1f;…

目标检测——监控下打架检测数据集

一、简述 首先&#xff0c;监控下打架检测是维护公共安全的重要手段。在公共场所、学校、监狱等地方&#xff0c;打架事件往往难以避免。通过安装打架检测监控系统&#xff0c;可以实时监控并准确识别打架事件&#xff0c;及时采取必要的应对措施&#xff0c;有效地减少打架事…

猫头虎分享已解决Bug || 数据中心断电:PowerLoss, DataCenterBlackout

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

存算一体成为突破算力瓶颈的关键技术?

大模型的训练和推理需要高性能的算力支持。以ChatGPT为例&#xff0c;据估算&#xff0c;在训练方面&#xff0c;1746亿参数的GPT-3模型大约需要375-625台8卡DGX A100服务器训练10天左右&#xff0c;对应A100 GPU数量约3000-5000张。 在推理方面&#xff0c;如果以A100 GPU单卡…

qsort函数的用法及参数的讲解

第一种用法展示&#xff1a;&#xff08;整形数组的qsort&#xff09; 一&#xff0c;qsort函数的定义&#xff1a; qsort 函数的定义&#xff1a;void qsort (void* base, size_t num, size_t size, int (*compar)(const void*,const void*)); 使用其需要包含头文件&#x…

浅述字典攻击

一、前言 字典攻击是一种常见的密码破解方法&#xff0c;它使用预先编制的字典文件作为攻击字典&#xff0c;通过尝试猜测密码的方式来破解密码。下面是一个关于字典攻击的博客&#xff0c;希望能够为您了解字典攻击提供帮助。 二、字典攻击概述 字典攻击是一种密码破解方法&…

STL容器之哈希的补充——其他哈希问题

1.其他哈希问题 ​ 减少了空间的消耗&#xff1b; 1.1位图 ​ 位图判断在不在的时间复杂度是O(1)&#xff0c;速度特别快; ​ 使用哈希函数直接定址法&#xff0c;1对1映射&#xff1b; ​ 对于海量的数据判断在不在的问题&#xff0c;使用之前的一些结构已经无法满足&…

Vue快速开发一个主页

前言 这里讲述我们如何快速利用Vue脚手架快速搭建一个主页。 页面布局 el-container / el-header / el-aside / el-main&#xff1a;https://element.eleme.cn/#/zh-CN/component/container <el-container><el-header style"background-color: #4c535a"…

STM32 HAL库RTC复位丢失年月日的解决办法

STM32 HAL库RTC复位丢失年月日的解决办法 0.前言一、实现方式1.CubeMX配置&#xff1a;2.MX_RTC_Init()函数修改2.编写手动解析函数 二、总结 参考文章&#xff1a;stm32f1 cubeMX RTC 掉电后日期丢失的问题 0.前言 最近在使用STM32F103做RTC实验时&#xff0c;发现RTC复位后时…

Web渗透测试流程

什么是渗透测试 渗透测试 (penetration test),是通过模拟恶意黑客的攻击方法&#xff0c;来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析&#xff0c;这个分析是从一个攻击者可能存在的位置来进行的&#xff0c;并且从这个…

Visual Basic6.0零基础教学(1)—vb的介绍和布局及其小案例

Visual Basic6.0零基础教学(1) 文章目录 Visual Basic6.0零基础教学(1)前言一、vb6.0介绍二、vb的起源一、起源&#xff1a;Basic二、版本三、 Visual Basic6.0 三种版本&#xff1a;四、vb的特点 1.vb的布局介绍创建应用程序的步骤总结 前言 大家好,从今天开始我也会开始更新…

【数据结构六】图文结合详解二叉树(五千字)

二叉树 树是一种非线性的数据结构&#xff0c;它是由n个结点组成的具有层次关系的集合&#xff0c;把他叫做树是因为它的根朝上&#xff0c;叶子朝下&#xff0c;看起来像一颗倒挂的树。二叉树是一种最多只有两个节点的树型结构。这篇文章会用Java代码手撕二叉树的实现&#xf…

水果小程序有哪些功能 怎么制作

​水果店的小程序&#xff0c;通常都非常受欢迎&#xff0c;而且下单率非常不错。它可以帮助水果商家在线销售水果并提供更好的购物体验。在这篇文章中&#xff0c;我们将介绍水果小程序常见的功能以及制作方法。 1. **商品展示与购买**&#xff1a;水果小程序可以展示各种水…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的体育赛事目标检测系统(Python+PySide6界面+训练代码)

摘要&#xff1a;开发和研究体育赛事目标检测系统对于增强体育分析和观赏体验至关重要。本篇博客详细讲述了如何运用深度学习技术构建一个体育赛事目标检测系统&#xff0c;并提供了完整的实现代码。系统基于先进的YOLOv8算法&#xff0c;对比了YOLOv7、YOLOv6、YOLOv5的性能&a…

linux网络通信(TCP)

TCP通信 1.socket----->第一个socket 失败-1&#xff0c;错误码 参数类型很多&#xff0c;man查看 2.connect 由于s_addr需要一个32位的数&#xff0c;使用下面函数将点分十进制字符串ip地址以网络字节序转换成32字节数值 同理端口号也有一个转换函数 我们的端口号位两个字…