服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - 教你如何使用C++ 统计地铁中站名出现的字的个数

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

2022-09-07 15:14计算机知识杂谈 C/C++

通过本文教大家如何使用C++ 统计地铁中站名出现的字的个数,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

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

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

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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数组总共有多少个元素。大体逻辑就是这样。

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

?
1
2
3
4
5
6
7
8
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,没出现过就新建一个。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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个元素所以直接写就可以了,不用循环来比对了。

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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名,摘取一些贴在下面:

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

 

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

原文链接:https://www.cnblogs.com/jisuanjizhishizatan/p/15842981.html

延伸 · 阅读

精彩推荐
  • C/C++浅谈C++中replace()方法

    浅谈C++中replace()方法

    C++编程语言中的string应用方式多样化,每一种应用方式都能帮助我们提实现特定的功能需求。在这里我们将会为大家详细介绍一下其中一个比较重要的用法...

    glp_hit12652021-03-16
  • C/C++纯C语言:分治快速排序源码分享

    纯C语言:分治快速排序源码分享

    这篇文章主要介绍了分治快速排序源码,有需要的朋友可以参考一下...

    C语言教程网6842021-01-13
  • C/C++C++ 异常处理 catch(...)介绍

    C++ 异常处理 catch(...)介绍

    catch(…)能够捕获多种数据类型的异常对象,所以它提供给程序员一种对异常 对象更好的控制手段,使开发的软件系统有很好的可靠性...

    C++教程网12902020-12-28
  • C/C++C语言动态内存分配函数的实现

    C语言动态内存分配函数的实现

    这篇文章主要介绍了C语言动态内存分配函数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    爱上小公举11202021-11-05
  • C/C++C语言实现电话簿项目管理

    C语言实现电话簿项目管理

    这篇文章主要为大家详细介绍了C语言实现电话簿项目管理,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    往明6532021-12-07
  • C/C++c语言中enum类型的用法案例讲解

    c语言中enum类型的用法案例讲解

    这篇文章主要介绍了c语言中enum类型的用法案例讲解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是本文的详细内容,需要的朋友可以参考...

    prayer52110092021-11-22
  • C/C++红黑树的使用详解

    红黑树的使用详解

    本篇文章是对红黑树的使用详解。需要的朋友参考下...

    C++教程网3602020-11-23
  • C/C++Qt实现线程与定时器的方法

    Qt实现线程与定时器的方法

    本文主要介绍了Qt实现线程与定时器的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    去冰三分糖7902022-08-24