Exemplo de um programa em C que resolve um problema similar via argumentos em linha de comando de main.
# arquivo makefile
CC=gcc
CFLAGS=-O3 -Wall -std=c11
SRC=$(wildcard *.c)
OBJ=$(SRC:.c=.o)
EXE=prog
all: $(EXE)
$(EXE): $(OBJ)
$(CC) $(OBJ) -o $@ $(CFLAGS)
%.o: %.c
$(CC) -o $@ -c $^ $(CFLAGS)
.PHONY: clean
clean:
rm *.o
// programa C
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_ARRAY_SIZE 25 // mude para 1000 em seu problema
#define MAX_WORD_SIZE 25 // mude para o tamanho máximo que um elemento pode ter
// interfaces
inline int pastArrayEnd(char[MAX_ARRAY_SIZE][MAX_WORD_SIZE], int, int);
// implementações
int cmp(const void *a, const void *b) {
return -1 * strcmp((char*) a, (char*) b);
}
inline int pastArrayEnd(char array[MAX_ARRAY_SIZE][MAX_WORD_SIZE], int max, int index) {
return (index >= max || strcmp(array[index], "") == 0);
}
int tailPrinting(char array[MAX_ARRAY_SIZE][MAX_WORD_SIZE], int max, int index) {
if (pastArrayEnd(array, max, index))
return index;
else {
printf(
"%s%s%s",
index == 0 ? "itens: " : "",
array[index],
!pastArrayEnd(array, max, index + 1) ? ", " : "\n"
);
return tailPrinting(array, max, index + 1);
}
}
int main(int argc, char *argv[]) {
char array[MAX_ARRAY_SIZE][MAX_WORD_SIZE] = { "" };
int index = 0;
for (int i = 0; i + 1 < argc && i < MAX_ARRAY_SIZE; i++, index++) {
strncpy(array[i], argv[i + 1], MAX_WORD_SIZE - 1);
if (strlen(argv[i + 1]) >= MAX_WORD_SIZE - 1)
array[i][MAX_WORD_SIZE - 1] = '\0';
}
// ordena inversamente os elementos
qsort(array, index, MAX_WORD_SIZE, cmp);
tailPrinting(array, MAX_ARRAY_SIZE, 0);
return 0;
}
Exemplo de entrada via terminal:
./prog banana pêra maçã abacaxi amora mirtilo manga laranja tangerina uva pessêgo
Saída:
itens: uva, tangerina, pêra, pessêgo, mirtilo, maçã, manga, laranja, banana, amora, abacaxi