教你如何使用C++ 統(tǒng)計(jì)地鐵中站名出現(xiàn)的字的個(gè)數(shù)
最近網(wǎng)上看到一個(gè)話題,也很有意思的,就寫到這里來了。
上海地鐵的站名中,出現(xiàn)頻率最高的字是什么?
正好,練習(xí)自己的C++代碼能力,給定一些站名,計(jì)算一下。
首先是一個(gè)文件,記錄了所有的站名,這個(gè)文件內(nèi)容比較長,摘錄一部分下來。這個(gè)文件可以作為我們的輸入文件來用。

注意,這個(gè)文件內(nèi)容上只是把所有線路的名稱羅列了一遍,可能有重復(fù)。因此,在我們計(jì)算的一開始,要把這些內(nèi)容去重。
最前面的部分如下:
#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這個(gè)變量用于記錄目前的name數(shù)組總共有多少個(gè)元素。大體邏輯就是這樣。
接下來,我們要統(tǒng)計(jì)出現(xiàn)的字符的數(shù)量。我們使用一個(gè)結(jié)構(gòu)體來記錄:
struct Count{
char T[4];//出現(xiàn)的中文漢字
int times;
Count(){
T[0]=T[1]=T[2]=T[3]=0;
}
}strCount[15000];
int sPos=0;由于是中文漢字,我們考慮使用字符串來存儲,大小放大一點(diǎn),就寫成4個(gè)字節(jié)吧。
我們從1開始,順次遍歷name數(shù)組的每個(gè)元素,然后把name中每個(gè)中文字符拿出來和strCount中比對。出現(xiàn)過就+1,沒出現(xiàn)過就新建一個(gè)。
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)){//這個(gè)字已經(jīng)出現(xiàn)過
strCount[k].times++;
flag=1;
}
}
if(flag==0){
strncpy(strCount[++sPos].T,c,2);
strCount[sPos].times=1;
}
}
}這里用到了一個(gè)check函數(shù)判斷字符串的相等,由于只有2個(gè)元素所以直接寫就可以了,不用循環(huán)來比對了。
bool check(char *A,char *B){
if(A[0]==B[0] && A[1]==B[1] )return true;
return false;
}然后最后的部分,進(jìn)行排序和輸出。
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;
}最終的輸出結(jié)果,這里我們只輸出前50名,摘取一些貼在下面:

本文所有內(nèi)容下載見:http://xiazai.jb51.net/202201/yuanma/calc_jb51.rar
到此這篇關(guān)于教你如何使用C++ 統(tǒng)計(jì)地鐵中站名出現(xiàn)的字的個(gè)數(shù)的文章就介紹到這了,更多相關(guān)C++ 統(tǒng)計(jì)地鐵中站名出現(xiàn)字的個(gè)數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入理解:Java是類型安全的語言,而C++是非類型安全的語言
本篇文章是對Java是類型安全的語言,而C++是非類型安全的語言進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
C語言獲取Linux系統(tǒng)精確時(shí)間的方法
下面小編就為大家?guī)硪黄狢語言獲取Linux系統(tǒng)精確時(shí)間的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
C++實(shí)現(xiàn)讀入二進(jìn)制數(shù)并轉(zhuǎn)換為十進(jìn)制輸出
本文給大家介紹的是一則使用C++實(shí)現(xiàn)讀入二進(jìn)制數(shù)并轉(zhuǎn)換為十進(jìn)制輸出的代碼,實(shí)現(xiàn)起來其實(shí)非常簡單,C++本身就提供了二進(jìn)制類庫的,大家看代碼吧,簡單又實(shí)用。2015-03-03
C++類重載函數(shù)的function和bind使用示例
這篇文章主要介紹了C++類重載函數(shù)的function和bind使用示例,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下2021-01-01

