输入一个字符串,对字符中的各个英文字符,数字,空格进行统计。 按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出
题目描述:
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计。按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出。
输入描述:输入一串字符。
输出描述:对字符中的各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。
示例
输入:././aadddcc d dc2././
输出:dc a2
先导知识:
1.ascll 码和 char 字符相互转换
转换方法:直接进行强制类型装换
#include <iostream>
using namespace std;int main()
{int i = 97; //十进制 97 ascll码对应 char 字符为 ‘a’cout << (char)i << endl;char j = 'a';cout << (int)j << endl;
}
/*=======================================函数输出:a97=======================================*/
2.map 容器中的内容不按 key 排序而按 value 排序
排序方法:将 map 的 key 值和 value 值分别放在 pair 类型的 vector 中,构造比较函数Compare
bool Compare(const pair<char, int> &p1, const pair<char, int> &p2)
{ return p1.second > p2.second; }
对于已经写好的 map<char, int> 类型的容器mymap,则具体实现按 value 值排序的过程为:
vector<pair<char, int>> myvector;
for(map<char, int>::iterator it = mymap.begin(); it != mymap.end(); it++)myvector.push_back(make_pair(it->first, it->second);
3.pair 和 make_pair 区别
(1)std::pair:
template <class T1,class T2> struct pair;
这个类将一对值组合在一起,这些值可能是不同类型的(T1 和 T2)。可以通过其公共成员访问各个值first 和 second。
pair 是将2个数据组合成一个数据,当需要这样的需求时就可以使用 pair,如stl中的map就是将key和value放在一起来保存。 另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。
(2)std::make_pair:
template <class T1, class T2>pair<T1, T2> make_pair (T1 x, T2 y)
{return ( pair<T1,T2>(x, y) );
}
构造一个 pair 对象,其第一个元素设置为x,第二个元素设置为y。模板类型可以从传递给的参数中隐式推导出来。
#include <utility> // std::pair
#include <iostream> // std::coutint main () {std::pair <int,int> foo;std::pair <int,int> bar;foo = std::make_pair (10,20);bar = std::make_pair (10.5,'A'); // ok: implicit conversion from pair<double,char>std::cout << "foo: " << foo.first << ", " << foo.second << '\n';std::cout << "bar: " << bar.first << ", " << bar.second << '\n';return 0;
}
/*================
foo:10,20
bar:10,65
================*/
对于 make_pair 来说无需写出参数类别, 就可以生成一个 pair 对象 。比如std::make_pair (10,20);而不必费力写成: std::pair <int,int>(10,20) ;
当有必要对一个接受pair参数的函数传递两个值时, make_pair()尤其显得方便,
vector<pair<char, int>> myvector;for(int i = 0; i < 128; i++)if(a[i] != 0)myvector.push_back(make_pair((char)i, a[i]));
4.计数法排序
请看博主的另一篇文章: https://blog.csdn.net/qq_41291253/article/details/90293423
5.stable_sort排序
请看博主另一篇文章:https://blog.csdn.net/qq_41291253/article/details/89920321
1.解题思路
- 先统计英文字符、数字、空格的数量
- 将统计好的数据按数量大小进行降序排序
- 输出排序后对应的字母、数字或空格
2.参考代码
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;//return max value
bool cmp(const pair<char, int>&p1, const pair<char, int>&p2)
{ return p1.second > p2.second; }int main()
{string str;while(getline(cin, str)){//Count the number of occurrences of charactersint a[128] = {0};for(int i = 0; i < str.size(); i++)if(str[i] == ' ' || (str[i] >= '0' && str[i] <= '9') ||(str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z'))a[str[i]]++;//Press non-zero characters into vector in ascll code ordervector<pair<char, int>> myvector;for(int i = 0; i < 128; i++)if(a[i] != 0)myvector.push_back(make_pair((char)i, a[i])); //Sorts the elements in the range [first,last) into ascending order, like sort,//but stable_sort preserves the relative order of the elements with equivalent values.stable_sort(myvector.begin(), myvector.end(), cmp);for(vector<pair<char, int>>::iterator it = myvector.begin(); it != myvector.end(); it++)cout << it->first;cout << endl;}
}/*===============================================函数输出:././aadddcc d dc2././dc a2cz01czdjf234./sdfzzcdf01234js
===============================================*/
输入一个字符串,对字符中的各个英文字符,数字,空格进行统计。 按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出相关推荐
- 今天开始学Java 如果统计的个数相同,则按照ASII码由小到大排序输出 。
题目描述 如果统计的个数相同,则按照ASII码由小到大排序输出 .如果有其他字符,则对这些字符不用进行统计. 实现以下接口: 输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复 ...
- 如何判断一个字符串在JavaScript中是否包含某个字符?
本文翻译自:How to tell if a string contains a certain character in JavaScript? I have a page with a textb ...
- 用户输入一个字符串,将下标为偶数的字符提出来合并成一个新的字符串A,再将下标为奇数的字符提出来合并成一个新的字符串B,再将字符串A和B连接起来并输出。
根据下述要求,编写一个程序:用户输入一个字符串,将下标为偶数的字符提出来合并成一个新的字符串A,再将下标为奇数的字符提出来合并成一个新的字符串B,再将字符串A和B连接起来并输出. rs = [] ev ...
- 输入一个字符串,用子函数完成在字符串中找出ACSII码值最大的字符,将其放在第一个位置,并将该字符前的所有字符向后顺序移动
<程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p143 7.1.2 上级实训内容 [实训内容9]输入一个字符串,用子函数完成在字符串中找出ACSII码 ...
- Java黑皮书课后题第7章:**7.34(对字符串中的字符排序)使用以下方法头编写一个方法,返回一个排序好的字符串。编写一个测试程序,提示用户输入一个字符串,显示排序好的字符串
**7.34(对字符串中的字符排序)使用以下方法头编写一个方法,返回一个排序好的字符串.编写一个测试程序,提示用户输入一个字符串,显示排序好的字符串 题目 题目描述 破题 代码 运行实例 题目 题目描 ...
- Java黑皮书课后题第6章:*6.23(指定字符的出现次数)使用下面的方法头编写一个方法,找到一个字符串中指定字符的出现次数。编写一个测试程序,提示用户输入一个字符串以及一个字符,显示该字符出现次数
6.23(指定字符的出现次数)使用下面的方法头编写一个方法,找到一个字符串中指定字符的出现次数.编写一个测试程序,提示用户输入一个字符串以及一个字符,显示该字符出现次数 题目 题目描述 破题 代码 运 ...
- c语言输入一段字符,C语言实现输入一个字符串后打印出该字符串中字符的所有排列...
本文实例讲述了C语言实现输入一个字符串后打印出该字符串中字符的所有排列的方法,属于数学里的排列问题.是一个很实用的算法技巧.分享给大家供大家参考.具体实现方法如下: 例如输入字符串abc,则输出由字符 ...
- C语言编程>第二十一周 ⑥ 请补充main函数,该函数的功能是:从键盘输入一个字符串,即一个指定,然后把这个字符及其后面的所有字符全部删除,结果仍然保存在原串中。
例题:请补充main函数,该函数的功能是:从键盘输入一个字符串,即一个指定,然后把这个字符及其后面的所有字符全部删除,结果仍然保存在原串中. 例如:输入"1234567",指定字符 ...
- python输入一个字符串、计算其中小写字符的个数_利用键盘录入,输入一个字符串,统计该字符串中各个字符的数量,并输出(c/c++实现)...
title: 输入一串字符串统计字符个数 localimage: image1 urlname: staticstringnum categories: summarytags: [writen, e ...
最新文章
- java 无锁缓存_如何在高并发环境下设计出无锁的数据库操作(Java版本)
- 登录MySQL数据库
- 看完这篇学会Ansible
- .NET 6 预览版 7:新功能已完成 ,将专注于改进
- 职场真实故事计划##职场干货# 职场晋升之路
- Centos7+ 修改hostname主机名命令
- 一个优雅地探索相关性的新可视化方法
- oracle10g em服务没有,如何配置和重建Oracle 10G的em服务 dbcontrol
- (day 20 - 中序遍历加双指针)剑指 Offer 36. 二叉搜索树与双向链表
- PHP推流地址获取图片
- 四种插入数据的MySQL语句比较
- Scrapy实战,利用Scrapy简单爬取新闻并将内容储存
- txt替换回车键符号怎么打_电脑小于等于符号≤怎么打
- 程序员的寂寞,你们不懂
- 【保姆级教程】使用python实现SIR模型(包含数据集的制作与导入及最终结果的可视化)
- 数据结构简单模拟银行排队系统
- BLE(12)—— 细说 Connection
- 几行烂代码,用错 Transactional,我赔了16万
- 如何使用Easy-POI导入复杂表头的Excel报表(含源码级分析)
- Win7电脑无法进入睡眠模式?