|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Mar 2008
Messaggi: 10
|
[C] errore che non capisco in ricorsione
Salve ragazzi devo scrivere una funzione ricorsiva che prenda come argomenti un array di char con dimensioni non specificate a tempo di compilazione e un carattere v e vedere se v compare nell'array.
Codice PHP:
Cosa vuol dire e poi econdo voi è giusto il ragionamento che ho fatto? |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Non va bene, 'i' deve essere valorizzato prima di dichiarare 'a', non può essere valorizzato dopo pensando di allocare l'array 'a' della giusta dimensione. (e comunque questo tipo di dichiarazione non è "ANSI-C")
Quote:
Inoltre la tua funzione ricerca() può anche non sapere a priori la lunghezza della stringa, purché essa sia terminata dal nullo finale. Ma devi testarlo nella tua funziona ... altrimenti come fai a sapere quando sei alla fine della stringa??
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Mar 2008
Messaggi: 10
|
La 'i' mi serve per dare la dimensione dell'array e la prendo dall'input dell'utente con scanf che poi utilizzo per scorrere gli indici dell'array.
So di essere arrivato alla fine della stringa quando arrivo ad a[i] con i uguale a '0'. Tu dici che la 'i' non serve ma allora tu come faresti ?? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Codice:
int ricerca (char *str, char c)
{
if (*str == '\0')
return 0;
else if (*str == c)
return 1;
else
return ricerca (++str, c);
}
Codice:
int ricerca (char *str, char c)
{
return *str == '\0' ? 0 : *str == c ? 1 : ricerca (++str, c);
}
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Mar 2008
Messaggi: 10
|
Vedendo il secondo caso che mi hai scritto posso dire che per me sei un genio una forma del genere ancora non l'avevo mai vista, bravo veramente e grazie tanto.
Però la cosa che non riesco a capire e che il progessore mi ha detto che l'array non deve avere dimensione in tempo di compilazione e allora se non gliela passa l'utente dal dos come fa a capire quanto è grande??? |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Eh ... magaaaari lo fossi.
Quote:
1) Stabilire a priori una dimensione massima ed allocare un buffer di tale dimensione. Esempio: char buf[100]; In tal caso non più di 99 caratteri (nullo finale escluso ma da inserire nel buffer) possono essere chiesti in input. 2) Chiedere prima all'utente il numero di caratteri e quindi allocare un buffer della dimensione richiesta (+1 per il nullo finale). Il buffer si può allocare con le funzioni tipo malloc/calloc oppure usando la dichiarazione di array a lunghezza variabile (C99/C++). Esempio: char buf[unaVar]; 3) Non stabilire una dimensione massima e non chiedere la dimensione all'utente ma allocare e riallocare a runtime il buffer man mano che serve. Avevo fatto un esempio di questa tecnica in questa discussione in cui avevo postato una funzione che legge una linea di lunghezza "arbitraria" da uno stream FILE*.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:03.



















