教你如何使用C++ 统计地铁中站名出现的字的个数

 更新时间:2022年01月27日 10:37:02   作者:计算机知识杂谈  
通过本文教大家如何使用C++ 统计地铁中站名出现的字的个数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

最近网上看到一个话题,也很有意思的,就写到这里来了。

上海地铁的站名中,出现频率最高的字是什么?

正好,练习自己的C++代码能力,给定一些站名,计算一下。

首先是一个文件,记录了所有的站名,这个文件内容比较长,摘录一部分下来。这个文件可以作为我们的输入文件来用。

注意,这个文件内容上只是把所有线路的名称罗列了一遍,可能有重复。因此,在我们计算的一开始,要把这些内容去重。
最前面的部分如下:

#include<iostream>
#include<string>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
string name[15000];
int nPos=0;
int main(){
	freopen("Name.txt","r",stdin);
	freopen("Calc.txt","w",stdout);
	//1.排重
	string s;
	while(cin>>s){
		int flag=0;
		for(int i=1;i<=nPos;i++){
			if(name[i]==s)flag=1;
		}
		if(flag==0)name[++nPos]=s;
	}

nPos这个变量用于记录目前的name数组总共有多少个元素。大体逻辑就是这样。

接下来,我们要统计出现的字符的数量。我们使用一个结构体来记录:

struct Count{
	char T[4];//出现的中文汉字 
	int times;
	Count(){
		T[0]=T[1]=T[2]=T[3]=0;
	}
}strCount[15000];
int sPos=0;

由于是中文汉字,我们考虑使用字符串来存储,大小放大一点,就写成4个字节吧。

我们从1开始,顺次遍历name数组的每个元素,然后把name中每个中文字符拿出来和strCount中比对。出现过就+1,没出现过就新建一个。

for(int i=1;i<=nPos;i++){
		for(int j=0;j+1<name[i].size();j+=2){
			char c[3];c[0]=name[i].at(j);c[1]=name[i].at(j+1);c[3]='\0'; //提取成中文
			int flag=0;
			for(int k=1;k<=sPos;k++){
				if(check(strCount[k].T,c)){//这个字已经出现过
					strCount[k].times++;
					flag=1;
				}
			}
			if(flag==0){
				strncpy(strCount[++sPos].T,c,2);
				strCount[sPos].times=1;
			}
		}
}

这里用到了一个check函数判断字符串的相等,由于只有2个元素所以直接写就可以了,不用循环来比对了。

bool check(char *A,char *B){
	if(A[0]==B[0] && A[1]==B[1] )return true;
	return false;
}

然后最后的部分,进行排序和输出。

bool comp(Count A,Count B){
	return A.times>B.times;
}

int main(){
	//中略
	//3.输出信息
	sort(strCount+1,strCount+sPos+1,comp);
	for(int i=1;i<=50;i++){
		cout<<strCount[i].T<<" "<<strCount[i].times<<endl;
	}
	return 0;
}

最终的输出结果,这里我们只输出前50名,摘取一些贴在下面:

本文所有内容下载见:http://xiazai.jb51.net/202201/yuanma/calc_jb51.rar

到此这篇关于教你如何使用C++ 统计地铁中站名出现的字的个数的文章就介绍到这了,更多相关C++ 统计地铁中站名出现字的个数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++简明分析临时对象是什么

    C++简明分析临时对象是什么

    对性能来说,许多的问题都需要和出现频率及本身执行一次的开销挂钩,有些问题虽然看似比较开销较大,但是很少会执行到,那也不会对程序有大的影响;同样一个很小开销的函数执行很频繁,同样会对程序的执行效率有很大影响。本章中作者主要根据临时对象来阐述这样一个观点
    2022-04-04
  • C++从汇编的视角审视对象的创建问题

    C++从汇编的视角审视对象的创建问题

    这篇文章主要介绍了C++从汇编的视角看对象的创建,从汇编的视角来看,调用构造器和调用 “返回对象” 的函数是一样的,从汇编的角度来看,对象就是一堆数据的排列,比如说最普通的对象就是数据成员按照声明顺序直接排列,需要的朋友可以参考下
    2022-01-01
  • 深入浅析C/C++语言结构体指针的使用注意事项

    深入浅析C/C++语言结构体指针的使用注意事项

    这篇文章主要介绍了C/C++语言结构体指针的使用,大家都知道指针在32位系统占用4Byte,在64位系统占用8Byte,下面看下c语言代码例子
    2021-12-12
  • C++实现LeetCode(107.二叉树层序遍历之二)

    C++实现LeetCode(107.二叉树层序遍历之二)

    这篇文章主要介绍了C++实现LeetCode(107.二叉树层序遍历之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++非递归队列实现二叉树的广度优先遍历

    C++非递归队列实现二叉树的广度优先遍历

    这篇文章主要介绍了C++非递归队列实现二叉树的广度优先遍历,实例分析了遍历二叉树相关算法技巧,并附带了两个相关算法实例,需要的朋友可以参考下
    2015-07-07
  • C++深入分析讲解智能指针

    C++深入分析讲解智能指针

    为了解决内存泄漏的问题,C++中提出了智能指针。内存泄漏的产生原因有很多,即使我们正确的使用malloc和free关键字也有可能产生内存泄漏,如在malloc和free之间如果存在抛异常,那也会产生内存泄漏。这种问题被称为异常安全
    2022-05-05
  • 深入解读C++中的指针变量

    深入解读C++中的指针变量

    这篇文章主要介绍了深入解读C++中的指针变量,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • Qt连接MySQL数据库的实现(保姆级成功版教程)

    Qt连接MySQL数据库的实现(保姆级成功版教程)

    本文主要介绍了Qt连接MySQL数据库的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • C语言数据结构算法基础之循环队列示例

    C语言数据结构算法基础之循环队列示例

    这篇文章主要为大家介绍了C语言数据结构算法基础之循环队列,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Mac OS X 10.8 中编译APUE(Unix环境高级编程)的源代码过程

    Mac OS X 10.8 中编译APUE(Unix环境高级编程)的源代码过程

    这篇文章主要介绍了Mac OS X 10.8 中编译APUE(Unix环境高级编程)的源代码过程,对于用MAC学习Unix环境高级编程的同学会有些作用,需要的朋友可以参考下
    2014-09-09

最新评论