Newsgroup: it.comp.lang.c
Titolo: esercizio di esame

Si definisca una funzione C che restituisce la stringa con caratteri
ordinati ottenuta dalla fusione di due stringhe (non ordinate) di
lunghezza variabile, ricevute in input.
Esempio: "studente" e "ammesso" devono fornire in uscita la stringa
"adeeemmnosssttu".
il mio risultato è questo
#include <stdio.h>
#include <string.h>
void swap (char *, int, int);
void qsort(char *, int, int);
void function(char *, char *);
void function(char *s1, char *s2)
{
	int i,j,length;
  strcat(s1, s2); //il programma mi da errore, ma per me dipende da
strcat
	for(length = 1; s1[length] != '\0'; length++)
		;
	qsort(s1, 0, length-1);
}
void qsort(char *s, int left, int right)
{
	int i, last;
	if(left >= right)
		return;
	void swap(char *, int , int );
	last = left;
	for(i = left + 1; i <= right; i++)
		if(s[i] < s[left])
			swap(s, ++last, i);
		swap(s, left, last);
		qsort(s, left, last-1);
		qsort(s, last+1, right);
}
int main(void)
{
	char s1[] = "campioni";
	char s2[] = "del mondo";
	function(s1, s2);
	printf("%s", s1);
	return 0;
}
void swap(char *s, int i, int j)
{
	char c;
	c = s[i];
	s[i] = s[j];
	s[j] = c;
}
il programma mi esegue correttamente la funzione ma mi da errore quando
termino il programma. ho provato implementando io la funzione strcat e
funzione bene. qual'è il problema allora?? non capisco....
grazie in anticipo per l'aiuto!!!

 	qsort(s1, 0, length-1);
esiste strlen() per la lunghezza delle stringhe e qsort()
e' una funzione della libreria standard.
HTH
C:\>iao Angelo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

grazie... ho fatto la seguente modifica
char * function(char *s1, char *s2)
{
	char *s3;
	s3 = (char *) malloc(sizeof(char) * (strlen(s1) + strlen(s2) + 1));
        strcpy(s3, s1);
        strcpy(s3 + strlen(s1), s2);
	qsort(s3, 0, strlen(s3)-1);
	return s3;
}
ora va tutto ok, grazie!!!!
solo una curiosità: come avrei dovuto fare se avessi voluto continuare
ad utilizzare la funzione strcat???

 ad utilizzare la funzione strcat???
sostituire
strcpy(s3 + strlen(s1), s2);
con
strcat(s3, s2);
:-)
C:\>iao Angelo

che scemo!!!! è vero!!!
GRAZIE!!

 "adeeemmnosssttu".
La funzione qsort() è già prevista dallo standard C :
#include <stdio.h>
#include <stdlib.h>
int compare (const void *a, const void *b) {
    return (*(char*)a - *(char*)b);
}
char *fusion(const char *s, const char *t) {
     char *result=calloc(strlen(s)+strlen(t)+1, 1);
     if (result) {                  
        sprintf(result, "%s%s", s, t);
        qsort(result, strlen(result), 1, compare);
     }
     return result;
}
int main()
{
    printf("%s\n", fusion("studente", "ammesso"));
    return 0;
}
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 	s3 = (char *) malloc(sizeof(char) * (strlen(s1) + strlen(s2) + 1));
Il cast sul valore di ritorno di malloc() č inutile in C e sizeof(char)
vale sempre 1, su qualsiasi piattaforma:
s3 = malloc(strlen(s1)+strlen(s2)+1);


         qsort(result, strlen(result), 1, compare);
solo una piccola cosa: ma non si dovrebbe includere string.h per poter usare
strlen?
$ gcc -W -Wall -std=c99 -pedantic -o laforgia laforgia.c
laforgia.c: In function `fusion':
laforgia.c:9: warning: implicit declaration of function `strlen'
$
-- 
Under construction

strlen?
Sì.  Dimenticanza ;-)