Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

跪求大神指点

Posted by zuihan at 2013-04-08 22:31:19 on Problem 1002
#include<vector>
#include<string>
#include<map>
#include<cctype>
#include<iterator> 
#include<iostream>

using std::cin;
using std::cout;
using std::endl;

#ifndef _Parse_H
#define _Parse_H
class Parse{
public:
	Parse()
	{
		numMapLetter["ABC"] = '2';
		numMapLetter["DEF"] = '3';
		numMapLetter["GHI"] = '4';
		numMapLetter["JKL"] = '5';
		numMapLetter["MNO"] = '6';
		numMapLetter["PRS"] = '7';
		numMapLetter["TUV"] = '8';
		numMapLetter["WXY"] = '9';
	}

	Parse(const std::vector<std::string> vecStr):vecString(vecStr)
	{
		numMapLetter["ABC"] = '2';
		numMapLetter["DEF"] = '3';
		numMapLetter["GHI"] = '4';
		numMapLetter["JKL"] = '5';
		numMapLetter["MNO"] = '6';
		numMapLetter["PRS"] = '7';
		numMapLetter["TUV"] = '8';
		numMapLetter["WXY"] = '9';
	}

	void setVecStr(std::string str); 
	void setMap();
	std::map<std::string,std::size_t> getResultMap()const;
private:
	std::vector<std::string> vecString;
	std::map<std::string,std::size_t> resultMap;
	std::map<std::string , char> numMapLetter;
};
#endif

void Parse::setVecStr(std::string str)
{
	if(str.size()<7||str.find_first_not_of("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-")!=std::string::npos)
		return;
	vecString.push_back(str);
	setMap();
}
void Parse::setMap()
{
	std::string str = vecString[vecString.size()-1];
	
	if(str[3] != '-')
	{
		str.insert(3,1,'-');
	}

	//std::cout<<str<<std::endl;

	std::size_t i = 0;
	while(i < str.size())
	{
		//删除多余的'-'
		if(str[i] == '-')
		{
			if(i == 3)
			{
				i++;
			}
			else
			{
				str.erase(i,1);
			}
			continue;
		}
		if(str[i]=='Q'||str[i]=='Z')
		{
			i++;
			continue;
		}
		//字符转换为数字
		if(!isdigit(str[i]))
		{
			std::map<std::string,char>::iterator mIter;
			for(mIter = numMapLetter.begin();mIter != numMapLetter.end();mIter++)
			{
				if(mIter->first.find(str[i]) != std::string::npos)
				{
					str[i]=mIter->second;
					break;
				}
			}
		}
		i++;
	}
	//std::cout<<i<<std::endl<<str<<std::endl;
	if(str.size()==8)
	{
		resultMap[str]++;
	}
	
}
std::map<std::string,std::size_t> Parse::getResultMap()const
{
	return resultMap;
}

int main()
{
	bool flag=false;
	Parse parse;
	std::map<std::string,std::size_t> resultMap;
	std::string str;
	int i,num;
	cin>>num;
	if(num<=0||num>100000)
		return 0;
	i=0;
	while(i<num)
	{
		cin>>str;
		parse.setVecStr(str);
		i++;
	}
	resultMap=parse.getResultMap();

	std::map<std::string,std::size_t>::iterator mIter;
	for(mIter = resultMap.begin();mIter != resultMap.end();mIter++)
	{
		if(mIter->second>1)
		{
			flag=true;
			cout<<mIter->first<<" "<<mIter->second<<endl;
		}
	}
	if(!flag)
	{
		cout<<"No duplicates."<<endl;
	}
	system("pause");
	return 0;
}






Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator