POJ 1002LTE 答案,有时间改为数字排序

本文介绍了一个使用C++实现的电话号码处理程序,该程序能够读取一系列包含字母和数字混合的电话号码,将其转换为纯数字形式,并检测并标记出现多次的电话号码。通过构造自定义类型和算法来实现电话号码的校正与比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<memory>
using namespace std;
void outputResult(string s)
{
	cout << s << std::endl;
}
struct StringWithFlag
{
	string s;
	bool flag;
	bool operator==(StringWithFlag &other) const
	{
		if (this->s == other.s)
			return true;
		return false;
	}

	StringWithFlag(string s, bool flag)
	{
		this->s = s;
		this->flag = flag;
	}
};
int charMap[90];
int main()
{
	//字符映射表
	
	//std::memset(charMap, 0, 90 * sizeof(int));
	charMap[65] = '2'; charMap[66] = '2'; charMap[67] = '2';
	charMap[68] = '3'; charMap[69] = '3'; charMap[70] = '3';
	charMap[71] = '4'; charMap[72] = '4'; charMap[73] = '4';
	charMap[74] = '5'; charMap[75] = '5'; charMap[76] = '5';
	charMap[77] = '6'; charMap[78] = '6'; charMap[79] = '6';
	charMap[80] = '7'; charMap[82] = '7'; charMap[83] ='7';
	charMap[84] = '8'; charMap[85] = '8'; charMap[86] = '8';
	charMap[87] = '9'; charMap[88] = '9'; charMap[89] = '9';

	vector<string> phoneVector = vector<string>();
	vector<StringWithFlag> correctedPhoneVector = vector<StringWithFlag>();
	vector<string> resultVector = vector<string>();
	int phoneNb = 0;
	cin >> phoneNb;
	for (int index = 0; index < phoneNb; index++)
	{
		string phoneString = string();
		cin >> phoneString;
		phoneVector.push_back(phoneString);

	}
	for (vector<string>::iterator it = phoneVector.begin(); it != phoneVector.end();)
	{
		//暂存转换后的号码数,只留数字
		string tempString = string();
		for (int strIndex = 0; strIndex < it->length(); strIndex++)
		{
			if (it->at(strIndex) == '-')
				continue;
			if (it->at(strIndex) >= '0' && it->at(strIndex) <= '9')
			{
				tempString.push_back(it->at(strIndex));
			}
			if (it->at(strIndex) >= 'A' && it->at(strIndex) <= 'Z')
			{
				tempString.push_back(charMap[(int)it->at(strIndex)]);
			}
		}
		
		correctedPhoneVector.push_back(StringWithFlag(tempString,true));
		//it = phoneVector.erase(it);
		it++;
		
	}
	size_t phoneVectorNum = correctedPhoneVector.size();
	int phoneCal = 0;
	for (vector<StringWithFlag>::iterator it = correctedPhoneVector.begin(); it != correctedPhoneVector.end();)
	{
		if (it->flag == false)
		{
			continue;
		}
		phoneCal = 0;
		for (vector<StringWithFlag>::iterator innerIt = correctedPhoneVector.begin(); innerIt != correctedPhoneVector.end();)
		{
			if (innerIt->flag &&*it == *innerIt)
			{
				phoneCal++;
				if (phoneCal > 1)
				{
					//innerIt = correctedPhoneVector.erase(innerIt);inner
					innerIt->flag = false;
					innerIt++;
				}
				else
				{
					innerIt++;
				}
				if (correctedPhoneVector.size() == 0)
				{
					break;
				}
			}
			else
			{
				innerIt++;
			}
			
		}
		if (phoneCal >1){
			it->s.insert(3, "-");
			string tempString = string(it->s);
			tempString.push_back(' ');
			tempString.push_back(phoneCal+'0');
			resultVector.push_back(tempString);
		}
		//it = correctedPhoneVector.erase(it);
		it->flag = false;
		it++;
		if (correctedPhoneVector.size() ==0)
		{
			break;
		}
	}
	sort(resultVector.begin(), resultVector.end());
	for_each(resultVector.begin(), resultVector.end(), outputResult);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值