Visualizzazione dei risultati da 1 a 9 su 9

Discussione: problema stringhe in C

  1. #1

    problema stringhe in C

    ciao..ho bisogno di 1 aiuto..mi sto rincretinendo da ieri..Ma e' possibile ke le parole lette dal file con la "fgets" siano piu' lunghe di un carattere rispetto alle stesse parole ke inserisco da tastiera?a me succede questo..infatti se le confronto con la STRCMP non le riconosce come uguali in quanto anke se parole uguali di fatto, una(quella letta da file) e' piu' lunga dell'altra(ke e' la stessa parola letta da tastiera) di 1 carattere!!
    Io so ' ke la "fgets" quando legge dal file le parole aggiunge il carattere di '\0" cioe' "fine stringa"....
    Il fatto e' ke conta '\0' come carattere quando controllo la parola con la STRLEN!!! E QUINDI SONO SEMPRE PIU' LUNGHE DI UN CARATTERE AZZO!!! COME RISOLVO STO PROB? SE NN LO RISOLVO NN POSSO FARE NE' LA RICERCA E NE' L'INSERIMENTO E SONO FOTTUTO!!

  2. #2
    fgets() legge una riga (terminante con \n)
    quindi la tua stringa assomigliera a :
    "ciao\n\0"
    se tu la confronti con "ciao\0" sara' diversa per forza..
    l'unica cosa che puoi fare e' sostituire il \n con un \0


  3. #3
    in pratica devo sostituire la fine riga delle mie parole lette dal file ,ke sono del tipo "ciao\n\0" con lo '\0' giusto? cosi ke diventino in questo modo---> "ciao\0\0" ok?Ma nn saranno lo stesso piu' lunghe?

  4. #4
    Originariamente inviato da maninblack
    in pratica devo sostituire la fine riga delle mie parole lette dal file ,ke sono del tipo "ciao\n\0" con lo '\0' giusto? cosi ke diventino in questo modo---> "ciao\0\0" ok?Ma nn saranno lo stesso piu' lunghe?
    si, ma se leggi la specifica del strcmp
    vedi che tu passi un
    const char *
    ovvero un puntatore ad una stringa ASCIIZ (una stringa che termina con \0) quindi lui considera la stringa fino al \0

  5. #5
    quindi con questo codice qui sotto lo posso fare?

    buf[x] e' il buffer ke contiene la parola letta dal file

    while(buf[x]!='\n')
    {
    x++;
    }
    buf[x]='\0';

  6. #6
    Originariamente inviato da maninblack
    quindi con questo codice qui sotto lo posso fare?

    buf[x] e' il buffer ke contiene la parola letta dal file

    while(buf[x]!='\n')
    {
    x++;
    }
    buf[x]='\0';
    certo, oppure con un
    buf[strlen(buf)-1]='\0';

  7. #7
    ok grazie!!! un'altra cosa se nn ti rompo...
    eseguo un controllo della stringa puntata da *temp.
    Solo ke oltra a stamparmi le lettere ke inserisco, x esempio "bb" mi stampa aggiuntivamente e di seguito ad esse 3 caratteri ASCII del tipo "bb♀Çü" !!! COME MAI? Come lo risolvo?

    while(isalpha(*temp))// controllo della stringa
    {
    buf1[j] = *temp;
    printf("\n %c\n",buf1[j]);
    j++;
    *temp++;
    }

  8. #8
    Originariamente inviato da maninblack
    ok grazie!!! un'altra cosa se nn ti rompo...
    eseguo un controllo della stringa puntata da *temp.
    Solo ke oltra a stamparmi le lettere ke inserisco, x esempio "bb" mi stampa aggiuntivamente e di seguito ad esse 3 caratteri ASCII del tipo "bb♀Çü" !!! COME MAI? Come lo risolvo?

    while(isalpha(*temp))// controllo della stringa
    {
    buf1[j] = *temp;
    printf("\n %c\n",buf1[j]);
    j++;
    *temp++;
    }
    scusa, ma *temp++ non sposta avanti il puntatore di 1 bensi' incrementa il carattere puntato..
    poi io odio questa notazione..
    usa:
    codice:
    int j=0
     while(isalpha(*(temp+j)))// controllo  della stringa
     {
       buf1[j] = *(temp+j);
       printf("\n %c\n",buf1[j++]);   
     }
    oppure direttamente senza usare buf

    printf ("\n %c\n",*(temp+j++))

  9. #9
    azz non va!! mi da' sempre quei cavolo di caratteri ascii!!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.