Calcolare la lunghezza di una stringa

di il
8 risposte

Calcolare la lunghezza di una stringa

Da questo codice:

#include <stdio.h>
#include <string.h>
#define DIM 100

int lunghezza(char a[]) {  // calcola la lunghezza della stringa
	int i = 0;
	for(i = 0; a[i] != '\0'; ++i);
	return i;
}

int main() {
	char stringa[DIM];
	int riprova = 0;
	while(riprova != -1) {
		printf("Inserire una stringa di massimo %d caratteri compresi gli spazi ", DIM);
		printf("e ne verra' calcolata la lunghezza\nInserisci la stringa:\n");
		scanf("%[^\n]", stringa);
		int l = lunghezza(stringa);
		printf("\nLa lunghezza della stringa e':  %d", l);		
		printf("\nVuoi riprovare con un'altra stringa? 1 per riprovare, -1 per terminare:  ");
		scanf("%d", &riprova);
		puts("\n");
	}
	return 0;
}
ottengo questo output dove non mi consente di inserire una nuova stringa?? Grazie.

  • Inserire una stringa di massimo 100 caratteri compresi gli spazi e ne verra' calcolata la lunghezza
    Inserisci la stringa:
    Ciao a tutti e buon 2020!

    La lunghezza della stringa e': 25
    Vuoi riprovare con un'altra stringa? 1 per riprovare, -1 per terminare: 1

    Inserire una stringa di massimo 100 caratteri compresi gli spazi e ne verra' calcolata la lunghezza
    Inserisci la stringa:

    La lunghezza della stringa e': 25
    Vuoi riprovare con un'altra stringa? 1 per riprovare, -1 per terminare: 1

    Inserire una stringa di massimo 100 caratteri compresi gli spazi e ne verra' calcolata la lunghezza
    Inserisci la stringa:

    La lunghezza della stringa e': 25
    Vuoi riprovare con un'altra stringa? 1 per riprovare, -1 per terminare: -1


    Time elapsed: 000:18:188
    Press any key to continue

8 Risposte

  • Re: Calcolare la lunghezza di una stringa

    Cosa é quella scanf strana? Per le stringhe si usa
    scanf ("%s", nomestringa);
    Semplice e lineare.
    Se usi questa non può non funzionare..

    Correzione:
    Questa funzione si ferma allo spazio. Per fermarla all' a capo esiste la
    gets (nomestringa);

    Comunque nella string.h é presente la funzione
    strlen (nomestringa);
    che restituisce la lunghezza della stringa
  • Re: Calcolare la lunghezza di una stringa

    Ti manca uno spazio
    		scanf(" %[^\n]", stringa);
    		int l = strlen(stringa);
    	
  • Re: Calcolare la lunghezza di una stringa

    @silente ... quella scanf non è strana ... rivedi la documentazione sulla scanf. Non è il caso di usare la gets.

    @JackieJack1207 ... A parte la soluzione data, puoi semplicemente pulire il buffer dopo l'ultima scanf, ovvero
    
    		scanf("%d", &riprova);
    		while (getchar() != '\n');
    
  • Re: Calcolare la lunghezza di una stringa

    oregon ha scritto:


    @silente ... quella scanf non è strana ... rivedi la documentazione sulla scanf. Non è il caso di usare la gets.

    @JackieJack1207 ... A parte la soluzione data, puoi semplicemente pulire il buffer dopo l'ultima scanf, ovvero
    
    		scanf("%d", &riprova);
    		while (getchar() != '\n');
    
    • Inserire una stringa di massimo 100 caratteri compresi gli spazi e ne verra' calcolata la lunghezza
      Inserisci la stringa:

      Grazie; while(getchar() != '\n'); funziona bene!

      La lunghezza della stringa e': 49
      Vuoi riprovare con un'altra stringa? 1 per riprovare, -1 per terminare: 1

      Inserire una stringa di massimo 100 caratteri compresi gli spazi e ne verra' calcolata la lunghezza
      Inserisci la stringa:

      Non mi resta che augurarvi di nuovo un buon 2020! Granzie ancora ed alla prossima!

      La lunghezza della stringa e': 85
      Vuoi riprovare con un'altra stringa? 1 per riprovare, -1 per terminare: -1

      Time elapsed: 000:46:297
      Press any key to continue
  • Re: Calcolare la lunghezza di una stringa

    Weierstrass ha scritto:


    Ti manca uno spazio
    		scanf(" %[^\n]", stringa);
    		int l = strlen(stringa);
    	
    Funziona anche con lo spazio come hai suggerito tu e senza pulire il buffer con
    while(getchar() != '\n');
    anche se non ne capisco il motivo!.... Grazie lo stesso...!
  • Re: Calcolare la lunghezza di una stringa

    silente ha scritto:


    Cosa é quella scanf strana? Per le stringhe si usa
    scanf ("%s", nomestringa);
    Semplice e lineare.
    Se usi questa non può non funzionare..

    Correzione:
    Questa funzione si ferma allo spazio. Per fermarla all' a capo esiste la
    gets (nomestringa);

    Comunque nella string.h é presente la funzione
    strlen (nomestringa);
    che restituisce la lunghezza della stringa
    Lo so che esiste la funzione
    int strlen(const char *nomestringa);
    ma è più in là con gli esercizi. Per ora l'ho fatta solo a livello teorico! grazie lo stesso!...Ciao..
  • Re: Calcolare la lunghezza di una stringa

    JackieJack1207 ha scritto:


    Weierstrass ha scritto:


    Ti manca uno spazio
    		scanf(" %[^\n]", stringa);
    		int l = strlen(stringa);
    	
    Funziona anche con lo spazio come hai suggerito tu e senza pulire il buffer con
    while(getchar() != '\n');
    anche se non ne capisco il motivo!.... Grazie lo stesso...!
    http://www.cplusplus.com/reference/cstdio/scanf
    Whitespace character: the function will read and ignore any whitespace characters encountered before the next non-whitespace character (whitespace characters include spaces, newline and tab characters -- see isspace). A single whitespace in the format string validates any quantity of whitespace characters extracted from the stream (including none).
  • Re: Calcolare la lunghezza di una stringa

    Dato che non hai spiegato il perchè ci vuole lo spazio prima del %, nell'espressione:
    scanf(" %[^\n]", nomestringa);
    immagino che sia nella "formula" per registrare da output tutti i caratteri escluso quello tra le parentesi quadre, dunque il newline, come dice nel forum che mi hai linkato (a proposito è una pagina abbastanza utile!). Dunque sintatticamente proprio senza lo spazio:
    scanf("%[^\n]", nomestringa);
    risulti sbagliato. Ok, grazie!!
Devi accedere o registrarti per scrivere nel forum
8 risposte