Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    50

    [c] contare parole che terminano in are

    contare il numero di parole che terminano in are. il testo è una stringa in italiano è separato da un unico spazio.

    come faccio a dire al compilatore che dovrei controllare le ultime 3lettere di una parola per vedere se corrisponde?
    codice:
    #include <stdio.h>
    #include <string.h>
    //conta parole che terminano in are
    int conta_parole(char *);
    int main()
    {
        int conta;
      char testo[100];
      printf("testo:");
      gets(testo);
      conta=conta_parole(testo);
      printf("il numero di parole := %d\n",conta);
      system("PAUSE");	
      
    }
    int conta_parole(char *testo)
    { char are[]="are";
        int i=0,conta_are=0;
        while(testo[i]!='\0')
        {strncmp(are,&testo[i],strlen(are)==1);
        conta_are=1;
                             if(testo[i]==' '){
                             strncmp(are,&testo[i-3],strlen(testo)==1);
                             conta_are++;
                             }
                             i++;
        }
    
    return conta_are;
    }
    codice:
    code

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Usi strlen per vedere quanto e lunga la stringa. Da quel valore ti ricavi gli ultimi 3 caratteri
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    50
    non ho capito cosa intendi usando strlen, puoi farmi un esempio in C.
    codice:
    code

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da asteroid
    non ho capito cosa intendi usando strlen, puoi farmi un esempio in C.
    1. Estrai le parole dal testo;
    2. Di ogni parola che trovi guardi quanto è lunga;
    3. Sapendo quanto è lunga puoi ottenere facilmente le ultime tre lettere;

    Una cosa del genere (non l'ho compilata ma a occhio sembra a posto):
    codice:
    int n = strlen(parola);
    if (n > 3) {
        char fine_parola[4];
        fine_parola[0] = parola[n - 3];
        fine_parola[1] = parola[n - 2];
        fine_parola[2] = parola[n - 1];
        fine_parola[3] = '\0'; /* fine stringa */
    
        if (!strncmp(fine_parola, "are", 3)) { 
            printf("La parola termina in \'are\'!");
        }
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: [c] contare parole che terminano in are

    Originariamente inviato da asteroid
    codice:
    strncmp(are,&testo[i],strlen(are)==1);
    strncmp(are,&testo[i-3],strlen(testo)==1);
    Ho notato adesso. Righe di codice come queste non hanno alcun senso:
    1. Il valore di ritorno non è verificato da nessuno;
    2. strlen(testo)==1 ti restituisce "vero" se testo è lungo un carattere solo, "falso" altrimenti. Perché lo fai? E perché il loro valore di ritorno l'hai messo come terzo parametro di strncmp? (che, tra parentesi, è il numero di caratteri che verranno confrontati dalla funzione...)
    3.&testo[i-3] significa "indirizzo dell'(i-3)esimo carattere". i parte da 0, otterrai segmentation fault se entri uno dei primi 3 caratteri di testo è uno spazio...

    my 2 cents
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    50
    codice:
    int conta_parole(char *testo)
    { int n,i,conta_parole=0;
     char *token;
     i=0;
     while(testo[i]!='\0')
     {token=strtok(testo," ");
     n=strlen(token);
     if(n>3){
              token[0]=testo[n-3];
              token[1]=testo[n-2];
              token[2]=testo[n-1];
              token[3]='\0'; //fine stringa
    
     if(!strncmp(token,"are",strlen(token)))
             conta_parole++;
             }
             i++;
    }
    return conta_parole;
    }
    penso ke intedevi così...solo che inserendo la parola mare mi conta=1 mentre quando inserisco solo are non me lo conta... e dovuto all'estrazione sbagliata dei token?
    codice:
    code

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da asteroid
    codice:
     n=strlen(token);
     if(n>3){
    solo che inserendo la parola mare mi conta=1 mentre quando inserisco solo are non me lo conta... e dovuto all'estrazione sbagliata dei token?
    Se la stringa non è lunga almeno 4 caratteri non viene effettuata la verifica, svista mia
    Metti n >= 3

    Originariamente inviato da asteroid
    penso ke intedevi così...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    50
    non va adesso l'output...quando inserisco una parola con are ....il conta_parole mi restiuisce sempre 3...quindi ho provato ad inserire una nuova var integer verita...... ho notato anche che dalla seconda parola che vado ad immettere ad esempio: TESTO= andare al mare ....la prima me la conta, mentre mare no.

    codice:
    int conta_parole(char *testo)
    { int n,i,verita=0,conta_parole=0;
     char *token;
     i=0;
     while(testo[i]!='\0')
     {token=strtok(testo," ");
     n=strlen(token);
     if(n>=3){
              token[0]=testo[n-3];
              token[1]=testo[n-2];
              token[2]=testo[n-1];
              token[3]='\0'; //fine stringa
    
     if(strncmp(token,"are",3)==0)
           verita++;
     if(verita==3)
     conta_parole++;
             }
             i++;
    }
    return conta_parole;
    }
    codice:
    code

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    50
    codice:
     {token=strtok(testo," ");
    con questo token lo fa solo per la prima parola che inserisco
    codice:
    code

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    50
    codice:
    int conta_parole(char *testo)
    {  int i, j, cnt = 0;
       
       char *tmp = (char *) malloc(strlen(testo));
          
       for(i = 0; i < strlen(testo); i++)
          {
             
         for(j = 0; testo[i] != ' ' && testo[i] != '\0'; i++, j++) tmp[j] = testo[i];
           
         if(tmp[j-3] == 'a' && tmp[j-2] == 'r' && tmp[j-1] == 'e') cnt += 1;
           
       }
          
       return cnt;
          
    }
    codice:
    code

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.