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

统计字符

习题描述

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

输入描述: 测试输入包含若干测试用例,每个测试用例包含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。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅述字典攻击

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

poetry库:依赖管理和打包工具

这个工具是在群里看见别人说好用的&#xff0c;所以了解一下。 1.poetry初始 官网&#xff1a;https://python-poetry.org/ 项目仓库&#xff1a;https://github.com/python-poetry 或 https://github.com/python-poetry/poetry 教程&#xff1a;https://python-poetry.org/…

为什么网络安全人才缺口这么大,但还是有很多人找不到工作?

为什么央视说到2027年我国网络安全人员缺口达327万&#xff0c;但是还是有很多人找不到工作。 今年大家听到“就业大环境很差”、“工作不好找”之类的太多了。如今大环境已经逐渐好转&#xff0c;虽然不需要太过焦虑&#xff0c;但是也要持续的提升自己。 最近有听华为的渗透…

杨辉三角(C语言)

杨辉三角 一.什么是杨辉三角 一.什么是杨辉三角 每个数等于它上方两数之和。 每行数字左右对称&#xff0c;由1开始逐渐变大。 第n行的数字有n项。 前n行共[(1n)n]/2 个数。 … 当前行的数上一行的数上一行的前一列的数 void yanghuisanjian(int arr[][20], int n) {for (int i…

SpringBoot源码

SpringBoot核心前置内容 1.Spring注解编程的发展过程 1.1 Spring 1.x 2004年3月24日&#xff0c;Spring1.0 正式发布&#xff0c;提供了IoC&#xff0c;AOP及XML配置的方式。 在Spring1.x版本中提供的是纯XML配置的方式&#xff0c;也就是在该版本中必须要提供xml的配置文件…

夏泽网注册码

夏泽网注册码申请法:1.打开注册码申请页&#xff0c;http://nianjian.xiaze.com/getcode.php 上面会显示你的注册码链接 (是个红色的链接,不同的时间不同的人这个链接不一样)。 2.将注册码链接以超链接的方式发布在各大网站、论坛、博客&#xff08;支持各大论坛、百度空间、 网…

117.龙芯2k1000-pmon(16)- linux下升级pmon

pmon的升级总是有些不方便&#xff0c;至少是要借助串口和串口工具 如果现场不方便连接串口&#xff0c;是不是可以使用网线升级pmon呢&#xff1f; 答案当然是可行的。 环境&#xff1a;2k1000linux3.10麒麟的文件系统 如今我已经把这个工具开发出来了。 GitHub - zhaozhi…

如何开通 GitHub Sponsors

Github Sponsors 是什么&#xff1f; 简单来说&#xff0c;GitHub Sponsors 是一个赞助服务&#xff0c;它允许个人和组织直接向开源贡献者和项目提供财务赞助&#xff0c;以便于有更多的时间和资源来专注于自己的开源工作。 这对于开源贡献者来说是非常棒&#x1f389;的&…

Swift 入门学习:集合(Collection)类型趣谈-下

概览 集合的概念在任何编程语言中都占有重要的位置&#xff0c;正所谓&#xff1a;“古来聚散地&#xff0c;宿昔长荆棘&#xff1b;游人聚散中&#xff0c;一片湖光里”。把那一片片、一瓣瓣、一粒粒“可耐”的小精灵全部收拢、吸纳的井然有序、条条有理&#xff0c;怎能不让…

008-slot插槽

slot插槽 1、插槽 slot 的简单使用2、插槽分类2.1 默认插槽2.2 具名插槽2.3 作用域插槽 插槽就是子组件中的提供给父组件使用的一个占位符&#xff0c;用<slot></slot> 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&…

【Docker】容器的生态系统

Docker提供了一整套技术支持&#xff0c;包括核心技术、平台技术、支持技术。 核心技术 容器核心技术是指能让Container&#xff08;容器&#xff09;在host&#xff08;集群、主机&#xff09;上运行起来的那些技术。 1&#xff09;容器规范&#xff1a;OCI&#xff08;runt…

round四舍五入在python2与python3版本间区别

round()方法返回数值的小数点四舍五入到n个数字。 语法 以下是round()方法的语法&#xff1a; round( x ,n) 参数 x --这是一个数值&#xff0c;表示需要格式化的数值 n --这也是一个数值,表示小数点后保留多少位 返回值 该方法返回 数值x 的小数点四舍五入到n个数字 …

计算机设计大赛 疲劳驾驶检测系统 python

文章目录 0 前言1 课题背景2 Dlib人脸识别2.1 简介2.2 Dlib优点2.3 相关代码2.4 人脸数据库2.5 人脸录入加识别效果 3 疲劳检测算法3.1 眼睛检测算法3.2 打哈欠检测算法3.3 点头检测算法 4 PyQt54.1 简介4.2相关界面代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#x…

图|dfs bfs|最小生成树|最短路|一篇搞定图的所有知识点

文章目录 图前言项目代码仓库图的基本概念图的表示方法邻接矩阵邻接表图的一些相关概念 图的遍历bfsdfs如果给的图不是连通图&#xff1f; 最小生成树Kruskal算法Prim算法 最短路径单源最短路径--Dijkstra算法单源最短路径--Bellman-Ford算法多源最短路径--Floyd-Warshall算法 …

数据治理实践——YY 直播业务指标治理实践

目录 一、问题背景 1.1 问题场景 1.2 问题小结 二、治理方案 2.1 治理目标 2.2 团队协同&#xff0c;共建规范 2.3 指标管理的定位 2.4 指标管理的目标及思路 2.5 指标管理&#xff0c;规范内容落地 2.6 数仓设计-关联指标维度 2.7 数据报表开发-配置口径说明 2.8 …

MongoDB在Linux环境下的安装与配置

目录 1. 准备工作 2. 安装MongoDB 2.1 传输MongoDB安装包 2.2 解压安装包 2.3 创建MongoDB安装目录 2.4 创建数据目录和日志目录 3. 启动MongoDB服务 3.1 启动MongoDB 3.2 连接MongoDB 3.3 退出MongoDB 1. 准备工作 在安装MongoDB之前&#xff0c;请确保您已具备以下…

Solidity Uniswap V2 价格预言机

预言机是连接区块链与链下服务的桥梁&#xff0c;这样就可以从智能合约中查询现实世界的数据。Chainlink 是最大的oracle网络之一&#xff0c;创建于 2017 年&#xff0c;如今已成为许多 DeFi 应用的重要组成部分。https://github.com/XuHugo/solidityproject Uniswap 虽然是链…

【leetcode热题】寻找旋转排序数组中的最小值 II

难度&#xff1a; 困难通过率&#xff1a; 38.7%题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如&#xff0c;数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的…

【react框架】跟我一起速读Next.js官方入门教学课程文档

文章目录 前言目录结构样式方案正常引入样式文件Tailwind方案CSS Modules方案clsx方案 文字和图片优化文字图片 Pages和Layout的机制PagesLayout 通过Link组件改变路由并且拆分打包提供Hooks通过Vercel创建数据未完待续... 前言 对于那些对Next.js一无所知的前端伙伴来说&…

鸿蒙开发(二)-项目结构

鸿蒙开发(二)-项目结构 上篇文章我们讲了如何配置鸿蒙开发的基础环境&#xff0c;以及创建了第一个鸿蒙程序。 这篇我们讲述了鸿蒙应用的项目目录结构。 如图所示&#xff1a;我们切换项目project可以看到。 另一种则是Ohos模式: AppScope->app.json5 应用的全局配置 {&q…