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

Why is my code always wrong? Actually I use dynamic allocation for the array, somebody please help me!!!

Posted by xiaohui5319 at 2012-04-25 17:56:36 on Problem 1002
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <set> 
#include <iostream>
using namespace std;

const int MAX_LEN=1000;

void handle(char * telNumber, int telLen, char * desTel, int desLen)
{
	int desIndex = 0;
	for(int i=0; i<telLen; i++)
	{
		if(telNumber[i]>='0' && telNumber[i]<='9')
			desTel[desIndex++] = telNumber[i];
		else if(telNumber[i]>='A' && telNumber[i]<='C')
			desTel[desIndex++] = '2';
		else if(telNumber[i]>='D' && telNumber[i]<='F')
			desTel[desIndex++] = '3';
		else if(telNumber[i]>='G' && telNumber[i]<='I')
			desTel[desIndex++] = '4';
		else if(telNumber[i]>='J' && telNumber[i]<='L')
			desTel[desIndex++] = '5';
		else if(telNumber[i]>='M' && telNumber[i]<='O')
			desTel[desIndex++] = '6';
		else if( (telNumber[i] == 'P') || (telNumber[i]>='R' && telNumber[i]<='S'))
			desTel[desIndex++] = '7';
		else if(telNumber[i]>='T' && telNumber[i]<='V')
			desTel[desIndex++] = '8';
		else if(telNumber[i]>='W' && telNumber[i]<='Y')
			desTel[desIndex++] = '9';
		else if('-' == telNumber[i])
			continue;
		else 
			desTel[desIndex++] = telNumber[i];
	}
}

void findDupliPrint(char ** desTel, int n)
{
	multiset<string> wordCount;
	for(int i=0; i<n; i++)
		wordCount.insert( string(desTel[i]) );
	bool noDuplicate = true;
	for(multiset<string>::iterator it = wordCount.begin(); it != wordCount.end(); )
	{
		string telNumber = *it;
		int Count = wordCount.count(telNumber), index=0;
		if(Count > 1)
		{
			noDuplicate = false;
			cout << telNumber.substr(0, 3) << "-" << telNumber.substr(3)<< " " << Count << endl;
		}
		while( (index++) < Count )
			it++;
	}
	if(noDuplicate)
		cout << "No duplicates. " << endl;
}

int main()
{
	int n;
	scanf("%d", &n);
	// allocate memory for input
	char ** telNumber = (char **)malloc(sizeof(char)*n*MAX_LEN);
	for(int i=0; i<n; i++)
		telNumber[i] = (char *)malloc(sizeof(char)*MAX_LEN);
	// allocate memory for desination string
	char ** desTel = (char ** )malloc(sizeof(char)*n*8);
	for(int i=0; i<n; i++)
		desTel[i] = (char *)malloc(sizeof(char)*8);
	for(int i=0; i<n; i++)
	{
		scanf("%s", telNumber[i]);
		handle(telNumber[i], (int)strlen(telNumber[i]), desTel[i], 8);
	}
	findDupliPrint(desTel, n);
	for(int i=0; i<n; i++)
		free(desTel[i]);
	free(desTel);
	for(int i=0; i<n; i++)
		free(telNumber[i]);
	free(telNumber);
	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