Funzione alterna C

di il
3 risposte

Funzione alterna C

Ciao!
Dovrei fare questo esercizio chi mi aiuta?
Creare i file alterna.h e alterna.c che consentano di utilizzare la seguente funzione:
extern char *alterna (const char *s1, const char *s2); 

La funzione accetta come parametri due stringhe zero terminate e deve restituire un puntatore ad
una nuova stringa zero terminata (allocata dinamicamente nell’heap) formata dall’alternarsi dei
caratteri della prima e della seconda stringa. Se le stringhe non hanno la stessa lunghezza, la
nuova stringa terminerà con i caratteri rimasti della stringa più lunga. Ad esempio, date le stringhe
“prova” e “1234567” la funzione deve ritornare la stringa “p1r2o3v4a567”.

3 Risposte

  • Re: Funzione alterna C

    Ci risiamo ...

    Aiuta come?

    Sai benissimo che qui non si scrive codice degli esercizi ma si corregge quello già scritto (e che abbia un minimo senso) ...

    Comincia con l'allocare la nuova stringa con la malloc a partire dalla somma delle lunghezze delle prime due che ottieni con la strlen
  • Re: Funzione alterna C

    Ecco!
    Così facendo il vettore è stato allocato nella memoria heap? scusate non ho mai usato la malloc e non capisco come si faccia a capire se funziona o meno.
    #include <stdio.h>
    
    #include "alterna.h"
    #define MAXC 100
    char *alterna (const char *str1, const char *str2){
    	char str3[MAXC];
    	int lng, *p,i =0, j=0, k=0;
    	p = str1;
    	lng = strlen(str1) + strlen(str2);
    	
    	p =(int *)malloc(sizeof(int));
    
    	while (i<lng && j<lng && (str1[i] != '\0' || str2[j] != '\0')) {
        if (str1[i] != '\0') 
    		str3[k++] = str1[i++];
        if (str2[j] != '\0') 
    		str3[k++] = str2[j++];
      }
      str3[k] = '\0';
    
      printf("La stringa risultante e':\n%s\n", str3);
    
    
    }
    
    
    int main()
    {
    	char str1[] = "prova";
    	char str2[] = "1234567";
    	
    	alterna(str1,str2);
    }
  • Re: Funzione alterna C

    Non devi usare str3. Stai usando la malloc quindi il tuo nuovo array è p

    Con la malloc devi allocare dei char non degli int quindi la sizeof(int) è sbagliata e comunque devi prevederne tanti quanti ne servono.

    Una stringa ha anche un carattere terminatore che devi considerare. Quando calcoli il valore totale della lunghezza, oltre alle due strlen devi anche sommare 1

    Anche qui manca la restituzione del puntatore con la return
Devi accedere o registrarti per scrivere nel forum
3 risposte