Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    7

    [C] Contare caratteri stringa incluso lo spazio

    Ciao,
    riesco a contare i caratteri di una stringa con le seguenti istruzioni:

    1°Metodo
    char stringa[100];
    char *string=stringa;

    while (*(string+i)!=0)
    ++i;
    printf("La lunghezza della stringa e': %d",i);

    2°Metodo
    char stringa[100];

    i=strlen(stringa);
    printf("La lunghezza della stringa e': %d",i);


    Il problema nasce quando voglio contare i caratteri di una stringa contenente gli spazi, ad esempio:

    "uno due tre" --> La lunghezza della stringa è 11 ma quella restituita da i due metodi è 3

    Si nota subito che appena incontra un carattere vuoto=0 ferma il conteggio
    ma come potrei fare per farlo continuare,o meglio, come posso fare ad ignorare gli spazi?

    Inoltre mi servirebbe un consiglio su come fare un confronto tra due caratteri uguali, uno in minuscolo e l'altro in maiuscolo, che mi dia come risultato VERO, ad esempio:

    char stringa[1]='a';
    char stringa[2]='A';

    if (stringa[1]==stringa[2])
    printf("I caratteri sono uguali");

    Grazie a chi vorrà aiutarmi.

  2. #2
    Utente di HTML.it L'avatar di vi1985
    Registrato dal
    Dec 2006
    Messaggi
    34
    codice:
    int n=0;
    while(stringa[n]!=EOF)
       n++;
    printf("La stringa contiene %d caratteri", n);

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Un attimo ...

    Un carattere che contiene uno "zero binario" non contiene uno spazio ... sono due cose diverse.

    Se la stringa e' cosi' come la vedi "uno due tre" e quelli sono spazi, essendo lo spazio equivalente al codice ASCII 32 (quindi diverso da zero binario) viene sempre contato (sia dalla strlen che con l'altro metodo) ...

    Se, come pare di capire, sono zeri binari, e' impossibile contarli perche' non ci sarebbe terminatore ...

    Quindi qualcosa non va nel tuo discorso.

    Per i caratteri maiuscoli/minuscoli, se esegui l'operazione

    r = ('a' & 0xDF) - ('A' & 0xDF)

    r vale zero solamente se i due caratteri sono uguali a prescindere dal fatto che siano maiuscoli/minuscoli (ovviamente per le lettere).

    @vi1985
    Cosa c'entra l'EOF?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    7
    Ciao,
    e grazie per avermi risposto, queste sono le istruzioni che ho scritto, ma purtroppo ho provato e riprovato e lo spazio non lo conta, forse sbaglio qualcosa?

    #include <stdio.h>
    #include <string.h>

    unsigned lunghezza = 0;
    char stringa[100];

    int main(void)
    {
    printf("Inserire parola: ");
    scanf("%s",stringa);
    lunghezza=strlen(stringa);
    printf("La lunghezza e': %d \n",lunghezza);
    }

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Dovevi mostrare questo codice sin dall'inizio ... il problema non e' nel conteggio dei caratteri presenti nella stringa.

    Il fatto e' che i caratteri dopo lo spazio NON sono inseriti nella stringa da parte della scanf.

    Al posto della linea

    scanf("%s",stringa);

    devi inserire la linea

    fgets(stringa, 99, stdin);

    In questo modo, tutti i caratteri (compresi gli spazi) sono inseriti nella stringa e possono essere contati in seguito.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    7
    Oregon Grazie 1000 x l'aiuto, in effetti ora conta pure li spazi però c'è un problemino, ossia se inserisco la parola ciao mi dice che è composta da 6 caratteri, come mai?
    Inoltre volevo chiederti se puoi spiegarmi la funzione fgets o se puoi rimandarmi a qualche documentazione.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    7
    Scusami,
    era un errore nel mio codice, ora se inserisco ciao mi dice che è formata da 5 caratteri.
    Se non sbaglio dice che è di 5 perchè conta anche il NULL TERMINATOR, giusto?

    Grazie ancora.

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    No ... il terminatore serve proprio a terminare e non viene contato.

    Succede che viene inserito anche il carattere di linefeed. Puoi correggere cosi'

    codice:
    #include <stdio.h>
    #include <string.h>
    
    unsigned lunghezza = 0;
    char stringa[100];
    
    int main(void) 
    {
      printf("Inserire parola: ");
      fgets(stringa, 99, stdin);
      stringa[strlen(stringa)-1]=0;
      lunghezza=strlen(stringa);
      printf("La lunghezza e': %d \n",lunghezza);
    }
    Per la fgets leggi

    http://www.cplusplus.com/ref/cstdio/fgets.html

  9. #9
    Utente di HTML.it L'avatar di vi1985
    Registrato dal
    Dec 2006
    Messaggi
    34
    @vi1985
    Cosa c'entra l'EOF?
    Scusa, nella fretta avevo letto solo in parte le specifiche richieste

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.