POJ 1002 487-3279 - 字符串转换为数组

本文介绍了一道名为POJ1002487-3279的编程题目,该题要求将电话号码形式的字符串转换为数字并进行排序和重复次数的统计。文章详细解释了字符串到数字的转换方法及如何使用C++实现这一过程。

POJ 1002 487-3279

题意:将字符串转化为数字,并排序统计重复数。难度:2星。

/*
 *	POJ 1002 487-3279
 *		将字符串转化为数字,并排序统计重复数;
 *
 *	字符数转化值得注意:
 *		string map("2223334445556667#77888999#");
 *		number = number *10 + (map[input[i] - 'A'] - '0');
 *	电话号码的输入字符数组开大点,开40过不了!
 *	格式化输出:
 *		printf("%03d-%04d %d\n", numBook[i - 1] / 10000, numBook[i - 1] % 10000, dulCnt);
 *
 */
#include <iostream>
#include <algorithm>

using namespace std;

int convert(char []);
string map("2223334445556667#77888999#");

int main()
{
	int n;
	char input[400];	/* 数组开大点! */
	int *numBook;
	int i, dulFlag, dulCnt;

	cin >> n;
	numBook = new int [n];

	i = 0;
	while (i < n)
	{
		cin >> input;
		numBook[i++] = convert(input);
	}

	sort(numBook, numBook + n);

	for (i = 1, dulFlag = 0; i < n; i++)
	{
		dulCnt = 1;
		while (i < n && numBook[i] == numBook[i - 1])
		{
			dulCnt++;
			i++;
		}
		if (dulCnt > 1)
		{	/* 格式化输出 */
			printf("%03d-%04d %d\n", numBook[i - 1] / 10000, numBook[i - 1] % 10000, dulCnt);
			dulFlag = 1;
		}
	}

	if (!dulFlag)
	{
		cout << "No duplicates. \n";
	}

	delete [] numBook;

	return 0;
}

int convert(char input[])
{
	int number;
	int i;

	for (i = 0, number = 0; input[i] != '\0'; i++)
	{
		if (input[i] >= '0' && input[i] <= '9')
		{
			number = number * 10 + (input[i] - '0');
		}
		else if (input[i] >= 'A' && input[i] <= 'Y' && input[i] != 'Q')
		{	
			/* 字符数转化值得注意 */
			number = number *10 + (map[input[i] - 'A'] - '0');
		}
	}

	return number;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值