|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jun 2007
Messaggi: 24
|
[C] Algoritmo su stringhe
Raga tra poco ho un esame di C e sto vedendo alcuni appelli vecchi... e questo mi sconvolge!!
Non voglio sapere la soluzione, ma solamente un consiglio sul procedimento, perchè non so assolutamente dove iniziare! Scrivere un programma che si pone l'obiettivo di leggere e poi memorizzare una serie di stringhe (non si sa quante) di lunghezza variabile, senza occupare memoria oltre quella necessaria. Il programma acquisisce da input, all'inizio, il numero di stringhe che si vogliono memorizzare (0 se nessuna), e dovrà effettuare poi la memorizzazione solo di quelle richieste. Il programma inoltre, prima di acquisire da input ogni stringa, acquisirà, sempre da input, la lunghezza della stringa che segue, che deve essere comprensiva di terminatore. Se la stringa fornita è più lunga di quanto dichiarato, i caratteri in eccesso non devono essere memorizzati. Per uscire si digiterà 0 alla richiesta della lunghezza. L’input del programma sarà quindi del tipo: <numero di stringhe> <lunghezza della prima stringa> <valore della prima stringa> … <lunghezza ultima stringa> <valore ultima stringa> Si chiede di stampare alla fine del programma tutte e sole le stringhe memorizzate, prima di liberare la memoria. Non si può usare la funzione realloc(), né si possono utilizzare variabili con allocazione non fissa, ad esempio: { <leggi n>; char Stringa[n]; } Sarà ulteriormente (e di molto) valutata la stesura dello stesso programma senza che si sappia da input il numero di stringhe da memorizzare. In questo, e solo in questo, caso è ammessa la realloc(). Avevo pensato di prendere in input il numero delle stringhe da inserire! E poi fare un for ogni volta ed utilizzare una malloc! ES. for(i=0;i<n;i++) {scanf("%d",&dim); s=(char *)malloc(dim * sizeof(char)); } Non so se questo procedimento è giusto, però vorrei sapere come risolvere il problema in quell'altra maniera, senza che si sappia da input il numero di stringhe da memorizzare, utilizzando la realloc! Grazie! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2006
Messaggi: 1304
|
Si può fare a meno sia del numero di stringhe, sia della lunghezza della stringa, almeno credo
Pseudocode: Codice:
//alloco un po di inutile spazio vuoto
memory = malloc( sizeof char );
index in memoria = 0;
while( true ) //break quando serve
{
acquisisco stringa
//calcolo quanti caratteri ci sono nella stringa prima del terminatore
size_t string_length = 0;
for( finche' non incontro /0, conto i caratteri. )
{
//il for e' vuoto
}
//contiamo pure il terminatore
string_length++;
if string_length = 1 break; //esce se si preme invio e basta
memoria richiesta = index in memoria + string_length;
rialloco la memoria per avere lo spazio richiesto
memcopio dentro la stringa, all'index in memoria.
il prossimo index e' la fine della memoria corrente.
}
//e poi svuota
free( memory )
Ultima modifica di Tommo : 05-06-2008 alle 17:38. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:26.



















