题目描述
CoCo喜欢旅游,每次都会去一个地方,并且每去过一个地方都会记录一下地名,当然有些地方去过多次也都会一一记录下来的。现在列出了CoCo去过的n个城市的名称(会有重复的),然后再输入一个城市的名称,想请你帮忙计算一下这个城市CoCo去过几次了。
输入要求
先输入一个正整数n(n小于等于1000),表示CoCo在旅行中去过n个地方了。
接下来n行依次输入n个字符串表示城市名,每个字符串的长度小于等于100字符,并且字符串中无空格,可能会有重复的城市名。
然后再输入一个城市名表示待查找字符串。
输出要求
输出该城市CoCo已经去过几次了。
输入样例
4
shanghai
beijing
hangzhou
beijing
beijing
输出样例
2
提示
多组测试数据,建议用形如while(scanf("%d",&n)!=EOF)的形式。
方法一 map (vc11++可用)
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main(){
int n;
map<string,int> m;
cin >> n;
string s,t;
for(int i=0;i<n;i++){
cin >> s;
m[s]++;
}
cin >> t;
for(auto it=m.begin();it!=m.end();it++){
if(it->first==t){
cout << it->second << endl;
break;
}
}
return 0;
}
方法二
#include <iostream>
#include <string.h>
using namespace std;
struct position{
char name[105];
int times;
}city[1001];
int main(){
int n;
char temp[1001];
while(scanf("%d",&n)!=EOF){
int j,i=0,re=0;
getchar();
while(n--){
gets(temp);
for(j=0;j<i;j++){
if(strcmp(city[j].name,temp) == 0){
city[j].times++;
break;
}
}
strcpy(city[i].name,temp);
city[i++].times=1;
}
n=i;
gets(temp);
for(i=0;i<n;i++){
if(strcmp(temp,city[i].name) == 0){
re=city[i].times;
break;
}
}
printf("%d\n",re);
}
return 0;
}