Esercizio su vettori di caratteri

di il
86 risposte

86 Risposte - Pagina 6

  • Re: Esercizio su vettori di caratteri

    Ora nel main ho messo len+MAXLINE al posto di MAXLINE (come parametro della funzione getline()) e ho messo un printf per visualizzare len.
    è strano perchè se parti in modo graduale con una riga il cui numero di caratteri è < 10 e poi metti altre righe sempre più grandi riesce a contare il vero numero di caratteri. Ma se metti come prima riga una lunga 50 caratteri non riesce a dare un numero unico di caratteri ad esmpio 50 ma da tipo tanti numeri come 10 20 15 5 la cui somma è 50.
    
    #include <stdio.h>
    #define MAXLINE 10
    /*getline legge la riga succesiva del testo in ingresso;
    deve segnalare l' eventuale fine del file (EOF)
    deve restituire la lunghezza della riga letta o 0 se non vi sono altri dati in ingresso*/
    int getline(char line[], int maxline);
    void copy(char to[], char from[]);
    
    int main()
    {
    	int len;		// lunghezza della riga corrente1
    	int max;		// lunghezza massima riscontrata finora2
    	char line[MAXLINE];	// riga corrente1
    	char longest[MAXLINE]; // contiene la riga più lunga trovata2
    	max = 0; len = 0;
    	while ((len = getline(line, len+MAXLINE)) > 0) {
    		if (len > max) {
    			max = len; // lunghezza massima riscontrata finora = lunghezza della riga corrente
    			copy(longest, line);
    		}
    		printf("%d", len);
    	}
    	if (max > 0) // c' era almeno una riga in ingresso
    		printf("%s", longest);
    	return 0;
    }
    
    // getline: legge una riga in ingresso, la assegna a s, ne restituisce la lunghezza
    int getline(char s[], int lim)
    {
    	int c, i, j;
    
    	for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) {
    		s[i] = c; 
    	}//le graffe del for sono solo indicative e si possono togliere
    		if (c == '\n')
    		{
    			s[i] = c;
    			++i;
    		}
    		s[i] = '\0';
    	return i;
    }
    
    // copy: copia la stringa 'from' sulla stringa 'to'; assume che 'to' sia sufficientemente lunga
    void copy(char to[], char from[])
    {
    	int i;
    
    	i = 0;
    	while ((to[i] = from[i]) != '\0')
    		++i;
    	
    }
    
  • Re: Esercizio su vettori di caratteri

    StandardOil ha scritto:


    Se vedi 91 hai sbagliato da qualche parte


    Sei sicuro di aver messo il terminatore di stringa?
    Si si trova alla fine della funzione getline();
  • Re: Esercizio su vettori di caratteri

    oregon ha scritto:


    Con quella printf senza spazi e senza ritorni a capo visualizzi prima 9 e poi 1 senza renderti conto che sono due valori diatinti
    Sono due valori distinti ma visualizzati insieme con un' unica istruzione nel ciclo
  • Re: Esercizio su vettori di caratteri

    È stato un piacere
    Ma, appunto, è stato
  • Re: Esercizio su vettori di caratteri

    StandardOil ha scritto:


    È stato un piacere
    Ma, appunto, è stato
    Ti puoi spiegare meglio?
  • Re: Esercizio su vettori di caratteri

    Ora che ci ho provato non mi dai la tua soluzione?@StandardOil
  • Re: Esercizio su vettori di caratteri

    Quindi è risolto cosi come l' ho fatto io?
  • Re: Esercizio su vettori di caratteri

    Ma tu vuoi mostrare la lunghezza della riga più lunga, anche se più lunga di MAXLENGHT?
    Allora direi proprio di no visto che consideri una riga come due righe…
  • Re: Esercizio su vettori di caratteri

    No l' esercizio dice 'affinchè visualizzi correttamente la lunghezza di righe arbitrariamente lunghe'
  • Re: Esercizio su vettori di caratteri

    Io non so più cosa dire

    Ho indicato i problemi di traduzione
    Sia in forma implicita che in forma esplicita
    (Vuol dire che ho messo la traduzione corretta)
    Ho indicato dove trovare il testo originale

    Ho indicato dove andare ad agire

    Ho indicato dove trovare la soluzione 'ufficiale'
    (E non sto scherzando, proprio quella ufficiale dei Bell Labs)

    Di più non posso fare

    Sto alla finestra e guardo
  • Re: Esercizio su vettori di caratteri

    Ah ok
  • Re: Esercizio su vettori di caratteri

    SuperManPC ha scritto:


    No l' esercizio dice 'affinchè visualizzi correttamente la lunghezza di righe arbitrariamente lunghe'
    E allora che te ne fai di una variabile max?

    Il punto che resta è che se hai MAXLENGHT = 10 e l’utente scrive "Ciao come stai?” quel codice considera "Ciao come " e "stai?" come righe diverse. E sì, certamente la lunghezza è la somma delle due lunghezze.

    Ma come fai ad ovviare al problema che getline legge massimo MAXLENGHT caratteri (senza cambiare MAXLENGHT)?
Devi accedere o registrarti per scrivere nel forum
86 risposte