Esercizio ricorsione-stringhe
Buongiorno, stavo eseguendo una prova d'esame e non riesco a trovarne l'errore. Mi chiede di creare una funzione ricorsiva che prenda in input una stringa e la converta in una lista sequenziale. La lista è composta da char della lettera, un int che indica quante volte la lettera si ripete ed ipotizzo anche il numero di elementi nella lista. Per esempio se la stringa è "ordini" la lista avrà 5 elementi
= o,1 r,1 d,1 i,2 n,1. Spero di essermi spiegato; cmq se compilo ed eseguo mi viene il classico errore di core dump. Questo è il codice
il main è un semplice debug. Ho paura magari di sbagliare nella gestione delle stringhe. In ogni caso grazie per il supporto
= o,1 r,1 d,1 i,2 n,1. Spero di essermi spiegato; cmq se compilo ed eseguo mi viene il classico errore di core dump. Questo è il codice
#include <stdio.h> #include <stdlib.h> typedef enum{true,false}boolean; typedef struct{ char Lettera[19]; int Num[19]; int Elem; }Lista; Lista *Funzione(char *s){ int i=0; boolean doppione=false; Lista *list; list->Elem=0; if(*s=='\0') return list; while(i<list->Elem){ if(*s==list->Lettera[i]){ list->Num[i]++; doppione=true; } i++; } if(doppione!=true){ list->Lettera[i]=*s; list->Num[i]=1; list->Elem++; } return Funzione(s++); } int main() { Lista *occorrenza; char *cane="cane"; occorrenza=Funzione(*cane); printf("%d",occorrenza->Lettera[2]); }
il main è un semplice debug. Ho paura magari di sbagliare nella gestione delle stringhe. In ogni caso grazie per il supporto

Risposte
Un primo errore che ho visto si trova nel main. Hai passato la stringa come *cane, ma facendo in questo modo stai passando un valore char (la prima lettera 'c') e non il puntatore a tale carattere e quindi la stringa.
Nella funzione stai poi accedendo alla variabile membro Elem senza aver inizializzato/allocato la lista.
L'ultimo punto è che quello che hai chiamato lista non è affatto una lista, ma una struttura che contiene al suo interno due array di lunghezza fissa.
Nella funzione stai poi accedendo alla variabile membro Elem senza aver inizializzato/allocato la lista.
L'ultimo punto è che quello che hai chiamato lista non è affatto una lista, ma una struttura che contiene al suo interno due array di lunghezza fissa.