pvjc20/du5/program.c

108 lines
2.1 KiB
C

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include<ctype.h>
struct person{
int score;
char name[30];
};
/*
struct person* addElement(struct person **PersonList,int score,char *name){
static int size = 1;
struct person *Personlist = calloc(size,sizeof(struct person));
size++;
return Personlist;
}
*/
int comp(const void *p1, const void *p2){
struct person* person1 = (struct person*)p1;
struct person* person2 = (struct person*)p2;
return strcmp(person1->name, person2->name)>0;
}
int comp_num(const void *p1, const void *p2){
struct person* person1 = (struct person*)p1;
struct person* person2 = (struct person*)p2;
return person1->score<person2->score;
}
int main(){
struct person PersonList[30];
char name[30];
int score=0;
int c =0;
char str[100];
while(fgets(str,100,stdin)){
if(str[0]=='\n'){
break;
}
sscanf(str,"%d %[^\t\n]",&score,name);
if(isalpha(str[0])!=0){
if(c==0){
printf("Nepodarilo nacitat nic\n");
return 0;
}
break;
}
PersonList[c].score = score;
strcpy(PersonList[c].name ,name);
c++;
score=0;
}
if(c>=2){
qsort(PersonList,c,sizeof(struct person),comp);
int res_strcmp=0;
int idex = 0;
for(int i =0;i<c;i++){
res_strcmp = strcmp(PersonList[i].name,PersonList[i+1].name);
if(res_strcmp==0){
PersonList[i-idex].score += PersonList[i+1].score;
idex++;
}
else{
idex=0;
}
}
}
int flag=0;
qsort(PersonList,c,sizeof(struct person),comp_num);
int k =0;
for(int i=0; i<c; i++)
{
for(int j=i+1; j<c; j++)
{
if(strcmp(PersonList[i].name,PersonList[j].name)==0)
{
for(int k=j; k<c; k++)
{
PersonList[k] = PersonList[k + 1];
}
c--;
j--;
}
}
}
printf("Vysledky:\n");
for(int i =0;i<c;i++){
printf("%d %s\n",PersonList[i].score,PersonList[i].name);
}
return 0;
}