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

大牛们帮我看看程序,为什么是Runtime error

Posted by se19880529 at 2010-05-11 01:28:05 on Problem 1002
#include<iostream>
#include<string>
#include<string.h>
#define MAX_COUNT 100000
#define MAX_BUFF 20
const char table[]={'2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7','7','7','7','8','8','8','9','9','9'};
using namespace std;
struct list{
  list* pre;
  string buf;
  int num;
  list* next;
};
void initList(list* l){
  l->next=NULL;
  l->pre=l;
};
void insert(list* h,list* a){
  a->next = NULL;
  h->pre->next = a;
  a->pre=h->pre;
  h->pre=a;
};
list* merge(list* head,list* h,int num){
  initList(head);
  list* temp;
  for(int i=0;i<num-1;i++){
    if(h[i].next==NULL)continue;
    head->pre->next=h[i].next;
    h[i].next->pre=head->pre;
    head->pre=h[i].pre;
  }
  return head;
};
class Directory{
  unsigned int m_number,m_Max;
  string* m_buffer;
public:
  Directory(int num=100):m_Max(num),m_number(0){
    if(num>MAX_COUNT)m_Max=MAX_COUNT;
    m_buffer=new string[m_Max];
  };
  string& regulize(string& a){
    char buf[MAX_BUFF],buf2[MAX_BUFF];
    strcpy(buf,a.c_str());    
    for(int i=0,j=0;buf[i]!=0;i++)if(buf[i]!='-'){
	if(j==3)buf2[j++]='-';
	if(buf[i]>'9'||buf[i]<'0')buf2[j++]=table[((buf[i]-'A')>26)?(buf[i]-'a'):(buf[i]-'A')];
	else buf2[j++]=buf[i];
      }
    buf2[8]=0;
    return a=buf2;
  };
  bool Input(string a){
    if(m_number>=m_Max)return false;
    else{
      m_buffer[m_number]=regulize(a);
      m_number++;
    }
    return true;
  };
  void output(){
    string* temp=new string[m_number];
    unsigned int* num = new unsigned int[m_number];
    unsigned int count=0;
    bool exist=false;
    for(int i=0,j=0;i<m_number;i++){
      for(j=0,exist=false;j<count;j++){
	if(m_buffer[i]==temp[j]){
	  exist=true;
	  break;
	}
      }
      if(!exist)temp[count]=m_buffer[i],num[count++]=1;
      else num[j]++;
    }
    list List[10],listh,*tempp,*tempp2;
    initList(&listh);
    for(int i=0;i<count;i++){
      tempp=new list;
      tempp->buf=temp[i];
      tempp->num=num[i];
      insert(&listh,tempp);
    }
    for(int i=0;i<8;(++i)==4?i++:i){
      for(int j=0;j<10;j++)initList(&List[j]);
      for(tempp=listh.next;tempp!=NULL;){
	tempp2=tempp;
	tempp=tempp->next;
	insert(&List[tempp2->buf.c_str()[7-i]-'0'],tempp2);
      }
      merge(&listh,List,10);
    }
    bool duplicates=false;
    for(tempp=listh.next;tempp!=NULL;tempp=tempp->next){
     
      
      if(tempp->num>1){
	cout<<tempp->buf<<" "<<tempp->num;
	if(tempp->next!=NULL)cout<<endl;
	duplicates=true;
      }
    }
    if(!duplicates)cout<<"No duplicates.";
    for(tempp=listh.next;tempp!=NULL;tempp=tempp->next)delete tempp;
    delete[] temp;
    delete[] num;
  };
  ~Directory(){
    delete[] m_buffer;
  };
};

int main(){
  unsigned int count;
  cin>>count;
  string temp;
  Directory dc(count);
  for(int i=0;i<count;i++){
    cin>>temp;
    dc.Input(temp);
  };
  dc.output();
  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