????????????????????????????
Code: Select all
#include <iostream>
#include <string>
#include <cstdlib>
#include <list>
#include <algorithm>
using namespace std;
class TelNumber
{
public:
TelNumber(){m_Duplication=1;};
TelNumber(string & num){m_Duplication=1;setNumber(num);}
void setNumber(string & number);
void hasDuplication(){m_Duplication++;};
int getDuplicationCount(){return m_Duplication;};
bool isDuplicationer(){return m_Duplication==1?false:true;};
bool operator < (TelNumber & that){if( _stricmp(m_Numstr.c_str
(),that.getNumber().c_str())>0)return false;else return true;};
string getNumber(){return m_Numstr;};
private:
char toNumberic(char );
string m_Numstr;
int m_Duplication;
};
void TelNumber::setNumber(string & number)
{
string::size_type idx;
for(idx=0;idx<number.length();++idx)
{
char sgl;//a single number
sgl=toNumberic(number.at(idx));
if(sgl!='#')
{
m_Numstr+=string(1,sgl);
}
}
if (m_Numstr.length()>7)
{
cerr<<"ilegal telphone number!\n"
<<m_Numstr
<<endl;
m_Numstr="";
}
}
char TelNumber::toNumberic(char a)
{
switch(a)
{
case 'A':
case 'B':
case 'C':return '2';
case 'D':
case 'E':
case 'F':return '3';
case 'G':
case 'H':
case 'I':return '4';
case 'J':
case 'K':
case 'L':return '5';
case 'M':
case 'N':
case 'O':return '6';
case 'P':
case 'Q':
case 'R':
case 'S':return '7';
case 'T':
case 'U':
case 'V':return '8';
case 'W':
case 'X':
case 'Y':
case 'Z':return '9';
case ' ':
case '-':return '#';
default:return a;
}
}
class TelBook
{
public:
TelBook(){};
void addNumber(TelNumber );
void print();
private:
list<TelNumber> m_telList;
};
void TelBook::addNumber(TelNumber num)
{
list<TelNumber>::iterator iter;
bool isdup;
isdup=false;
for(iter=m_telList.begin();iter!=m_telList.end();++iter)
{
if(iter->getNumber()==num.getNumber()){iter->hasDuplication
();isdup=true;}
}
if(!isdup){m_telList.push_back(num);}
}
void TelBook::print()
{
m_telList.sort();
list<TelNumber>::iterator iter;
bool noDup;
noDup=true;
for(iter=m_telList.begin();iter!=m_telList.end();++iter)
{
if(iter->isDuplicationer())
{
cout<<iter->getNumber().substr(0,3)
<<"-"
<<iter->getNumber().substr(3)
<<" "
<<iter->getDuplicationCount()
<<endl;
noDup=false;
}
}
if(noDup){cout<<"No duplication."<<endl;}
}
void todo( void )
{
int i,n;
cin>>n;
TelBook book;
string telstr;
getline(cin,telstr);
for(i=0;i<n;++i)
{
getline(cin,telstr);
TelNumber num(telstr);
book.addNumber(num);
}
book.print();
cout<<endl;
}
int main()
{
int i,n;
cin>>n;
for(i=0;i<n;++i)
{
getchar();
todo();
}
return 0;
}
[/code]