c++ 关于地图

c++关于map刚学c++,脑子一片浆糊A, B, C对应2 D, E, F对应3G, H, I对应4 J, K, L对应5M, N, O对应6 P, Q,R

c++ 关于map
刚学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;
}
错了不知道怎么改,,麻烦各位大神帮我详细解答一下 c++ map string
[解决办法]
if 
赋值和等于是一样的吗???
[解决办法]

#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;
}


注意:输入字符是大写的!!
[解决办法]
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;
});
}