c++ 关于map

cjl1166 2013-03-31 01:30:32
刚学c++,脑子一片浆糊
A, B, C对应2 D, E, F对应3
G, H, I对应4 J, K, L对应5
M, N, O对应6 P, Q,R, S对应7
T, U, V对应8 W, X, Y,Z对应9
1与0单独设键。
上海市电话号码是8位,为了便于记忆,在第4,5位之间有一个连接符‘-’,如6932 - 6459,这样的电话号码表示称为标准格式。例如,3100-GINO 的标准格式是3100-4466。
现给你一组用字母、数字和连接符‘-’构成的电话号码,连字符不需要拨号,可以任意添加。请你将这组电话号码转换为标准格式。如果两个电话号码的标准格式相同,则认为它们是同一个电话号码,统计它出现的次数。


Input

第一行是一个正整数N,表示电话号码的组数(0<N<=100)。
接下来的N行,每行是一个电话号码。每个电话号码由数字、大写字母以及连接符组成。每行不超过80个字符。


Output

将转换后的标准格式的电话号码按照升序输出,相同的电话号码只输出一次,在电话号码的后面跟一个空格接着输出该电话号码的出现次数。每行末尾有一个换行符。具体格式见输出样例。

用两个map做,,嗯
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
map<char,int>m;map < char,int >::iterator iter;
map<string,int>n;map < string,int >::iterator ite;
string s,g;
int i,j,t,l;
m['A']=m['B']=m['C']=2;m['D']=m['E']=m['F']=3;m['G']=m['H']=m['I']=4;m['J']=m['K']=m['L']=5;m['M']=m['N']=m['O']=6;m['P']=m['Q']=m['R']=m['S']=7;m['T']=m['U']=m['V']=8;m['W']=m['X']=m['Y']=m['Z']=9;
cin>>t;
for(i=0;i<t;i++)
{
getline(cin,s);l=0;
for(j=0;s[j]!='\n';j++)
{
if(s[j]='-')
break;
iter = m.find(s[j]);
if (iter != m.end())
g[l]=iter->second;l++;
if(l=4)
{g[l]='-';l++;}
}
n.insert(pair<string,int>(g,i));
}
for (ite = n.begin(); ite != n.end(); ite )
{
cout<< iter->first << " " << iter-> second << " " << endl;
}
return 0;
}
错了不知道怎么改,,麻烦各位大神帮我详细解答一下
...全文
176 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cjl1166 2013-04-07
  • 打赏
  • 举报
回复
二楼和三楼运行的都不对啊
door8 2013-04-07
  • 打赏
  • 举报
回复
int main( )
{

	map<char,int> m;
	map<string,int>m2;
	char g[256]={0};
	char s[256]={0};
	
	m['A']=m['B']=m['C']=2;
	m['D']=m['E']=m['F']=3;
	m['G']=m['H']=m['I']=4;
	m['J']=m['K']=m['L']=5;
	m['M']=m['N']=m['O']=6;
	m['P']=m['Q']=m['R']=m['S']=7;
	m['T']=m['U']=m['V']=8;
	m['W']=m['X']=m['Y']=m['Z']=9;
	int count=0;
	cout<<"请输入电话号码的总个数\n";
	cin>>count;
	for (int i=0;i<count;i++)
	{		
		cin>>s;
		int l=0;
		for (int j=0;s[j]!='\0';j++)
		{
			auto it=m.find(s[j]);
			if (it!=m.end())
			{
				g[l]=it->second+48;
			}
			else
			{
				if (g[l]=='-')
				{
					g[l++]='-';						
					continue;
				}
				else		
						g[l]=s[j];
			
			}			
			++l;
		}
	
		auto ic=m2.find(g);
		if (ic!=m2.end())
			ic->second+=1;			
		else
			m2.insert(make_pair(g,1));			

	}
	cout<<endl;

	for_each(m2.begin(),m2.end(),[](pair<string,int> pa)
		{
			cout<<"转换后的电话号码: "<<pa.first<<"\t"<<"出现的次数:"<<pa.second<<endl;
	});
}
shen_wei 2013-04-01
  • 打赏
  • 举报
回复
#include<iostream>
#include<map>
#include<string>
using namespace std;
int main()
{
	map<char,int>m;
	map < char,int >::iterator iter;
	map<string,int>n;
	map < string,int >::iterator ite;
	char s[256] = {0},g[256] = {0};
	int i,j,t,l;
	m['A']=m['B']=m['C']=2;
	m['D']=m['E']=m['F']=3;
	m['G']=m['H']=m['I']=4;
	m['J']=m['K']=m['L']=5;
	m['M']=m['N']=m['O']=6;
	m['P']=m['Q']=m['R']=m['S']=7;
	m['T']=m['U']=m['V']=8;
	m['W']=m['X']=m['Y']=m['Z']=9;
	cin>>t;
	for(i=0;i<t;i++)
	{
		//getline(cin,s);
		cin>>s;		
		l=0;
		for(j=0;s[j]!='0';j++)
		{
			if(s[j]=='-')
				break;
			iter = m.find(s[j]); 
			if (iter != m.end()) 
				g[l]=iter->second+48;
			l++;
			if(l==4)
			{
				g[l]='-';
				l++;
			}
		}
		n.insert(pair<string,int>(g,i));
	}
	for (ite = n.begin(); ite != n.end(); ite++ )
	{
		cout<< ite->first << "  " << ite-> second << " " << endl;
	}
	system("PAUSE");
	return 0;
}
注意:输入字符是大写的!!
shen_wei 2013-04-01
  • 打赏
  • 举报
回复
if 赋值和等于是一样的吗???

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧