Questa è la soluzione che ho trovato, in pratica le stringhe vengono trattate come vettori di caratteri, il problema è che così facendo mi replica le lettere, mentre nella traccia è richiesto che non c'è ne siano, come può essere migliorato?

ps: scusate la brutta formattazione del codice

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef char tstr[50];   //Definizione di un nuovo tipo "tstr", abbreviazione arbitraria di "tipo stringa"

int unionSet(int x, int z,tstr alfa, tstr beta, tstr gamma, int numelementia, int numelementib, int s); //Prototipo di funzione unionset

int
main(void)
{
  tstr a="aeiou";         //Dichiarazione delle variabili
  tstr b="arsue";
  tstr g;
  int numelementia;       //numero di elementi della prima stringa
  int numelementib;       //numero di elementi della prima stringa
  
  int z; //variabile nel richiamo alla funzione
  int x; //variabile nel richiamo alla funzione
  int s; //variabile ciclo for per la stampa del vettore gamma
  
  int y; //variabile con valore la somma degli elementi di a + gli elementi di b
  
  z = 0;
  x = 0;
  s = 0;
  
  numelementia=strlen(a);
  numelementib=strlen(b);
  
  
  unionSet(x, z, a, b, g, numelementia, numelementib, s);  //richiamo alla funzione unionset
  y = numelementia + numelementib;
  printf("\n\n");
  printf("Gli elementi di gamma sono: ");
  fflush(stdin);
  for(s=0; s <= y; s++)  //ciclo for per l'output dei dati del vettore gamma
  {
   printf("%c",g[s]);
  }


printf("\n\n\n");
system("PAUSE");
return 0;
}

int 
unionSet(int x, int z,tstr alfa, tstr beta, tstr gamma, int numelementia, int numelementib, int s) //funzione unionset per la fusione di alfa e beta in gamma
{
  if((z <= numelementia) && (x <= numelementib))    //confronto tra gli elementi di alfa e gli elementi di beta
    if((alfa[z])<(beta[x]))
      {
       gamma[s]= alfa[z];
       z++;
       s++;       
       return unionSet(x, z, alfa, beta, gamma, numelementia, numelementib, s);  //ritorno alla funzione unionset
      }
       else
        {
         gamma[s] = beta[x];
         x++;
         s++;
         return unionSet(x, z, alfa, beta, gamma, numelementia, numelementib, s);
        }
       else
   {
    if (z <= numelementia)                  //caricamento degli elementi di alfa, finito il confronto con gli elementi beta,
       {                                    //nella stringa gamma
        gamma[s]= alfa[z];
        printf("%c",gamma[s]);
        z++;
        s++;       
        return unionSet(x, z, alfa, beta, gamma, numelementia, numelementib, s);
       }
       else 
        if (x <= numelementib)               //caricamento degli elementi di beta ne vettore gamma
          {
           gamma[s] = beta[x];
           x++;
           s++;
           return unionSet(x, z, alfa, beta, gamma, numelementia, numelementib, s);
         }
         else                  //condizione di uscita dalla ricorsione
         return 0;
   }  
}