#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 1024
#define BUFFSIZE 3 /* >= 2 */
char *getline(void)
{
static char inbuff[BUFFSIZE];
char *outbuff_malloc, *tmpbuff;
char *p;
int fEOL;
if ((outbuff_malloc = malloc(1)) == NULL)
return NULL;
*outbuff_malloc = '\0';
fEOL = 0;
do {
if (fgets(inbuff, BUFFSIZE, stdin) == NULL)
break;
for (p = inbuff; *p != '\0'; p++)
;
if (*(p - 1) == '\n') {
*(p - 1) = '\0';
fEOL = 1;
}
if ((tmpbuff = realloc(outbuff_malloc, strlen(outbuff_malloc) + strlen(inbuff) + 1)) ==NULL) {
free(outbuff_malloc);
return NULL;
}
strcat(tmpbuff, inbuff);
outbuff_malloc = tmpbuff;
} while (!fEOL);
return outbuff_malloc;
}
int main()
{
int n, i, k;
char *cat[N], *buff;
int order[N];
printf("input string num: ");
buff = getline();
n = atoi(buff);
if (n > N) {
fprintf(stderr, "not supported, too large.\n");
return -1;
}
for (i = 0; i < n; i++) {
printf("%dth string: ", i + 1);
if ((cat[i] = getline()) == NULL) {
printf("memory full, aborted.\n");
return -1;
}
}
for (i = 0; i < n; i++) {
printf("%dth order: ", i + 1);
scanf("%d", &k);
order[i] = k - 1;
}
for (i = 0; i < n; i++)
printf("%s", cat[order[i]]);
for (i = 0; i < n; i++)
free(cat[i]);
return 0;
}
/* end */