В файле unit1.cpp напишите функцию int DeleteDuplicates(int r[], int n){
которая удаляет дубликатные значения из несортированного массива r длиной n.
Функция возвращает длину результирующего массива
//
/* УДАЛИТЬ ДУБЛИКАТЫ В НЕСОРТИРОВАННОМ МАССИВЕ */
#include
#pragma hdrstop
#include "Unit1.h"
//
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
#define DIGIT 0
#define COMMA 2
#define DEFIS 3
#define BLANK 4
#define OTHER 5
//
static short SymClass(char z){
// для ParsePages
if(z>='0' && z<='9'){
return DIGIT;
}
if(z==','){
return COMMA;
}
if(z=='-'){
return DEFIS;
}
if(z==' '){
return BLANK;
}
return OTHER;
}
//
int StringToIntArray(AnsiString p, int *r){
int k,p1=-1,p2=-1;
char *s;
char buf[20];
short sClass;
int i=0; // номер символа набираемого числа
int n=0; // число страниц (текущая длина p)
int LastPunkt=-1; // последний символ из DEFIS или COMMA
// -1 значит никакого
if(p.IsEmpty()){
return 0;
}
for(s=p.c_str(); *s!='\0'; s++){
sClass=SymClass(*s);
switch(sClass){
case DIGIT:
buf[i++]=*s;
break;
case COMMA:
buf[i]='\0';
if(LastPunkt==-1 || LastPunkt==COMMA){
p1=atoi(buf);
r[n++]=p1;
}
if(LastPunkt==DEFIS){
p2=atoi(buf);
if(p1==-1 || p2==-1){
return -1;
}
if(p2 return -1;
}
for(k=p1;k<=p2;k++){
r[n++]=k;
}
p1=p2=-1;
}
i=0;
LastPunkt=COMMA;
break;
case DEFIS:
buf[i]='\0';
p1=atoi(buf);
p2=-1;
LastPunkt=DEFIS;
i=0;
break;
case BLANK:
break;
default:
return -1;
} // switch
}
buf[i]='\0';
if(LastPunkt==-1 || LastPunkt==COMMA){
p1=atoi(buf);
r[n++]=p1;
}
if(LastPunkt==DEFIS){
p2=atoi(buf);
if(p1==-1 || p2==-1){
return -1;
}
for(k=p1;k<=p2;k++){
r[n++]=k;
}
}
return n;
}
//Не удаляйте и не изменяйте эту строку
int DeleteDuplicates(int r[], int n){
// ФУНКЦИЯ, КОТОРУЮ ВЫ ДОЛЖНЫ НАПИСАТЬ
// удалить дубликатные значения из
// несортированного массива r длиной n.
// Функция возвращает длину результирующего массива
return n;
}
//Не удаляйте и не изменяйте эту строку
//
void __fastcall TForm1::btnClick(TObject *Sender){
int r[1024];
int n= StringToIntArray(edt1->Text, r);
int k=DeleteDuplicates(r,n);
AnsiString s="", Comma="";
for(int i=0; i s=s+Comma+r[i];
Comma=",";
}
edt2->Text=s;
}