[c] contare parole che terminano in are

di il
8 risposte

[c] contare parole che terminano in are

Salve,
siccome dovrei contare il numero di parole che finiscono in are, quando inserisco il testo, la prima parola la seguente funzione me la estrae con la funzione strtok e poi me l'ha confronta con "are" e fin qui ci siamo, quando lo voglio fare con la seconda o con la terza o quarta parola e così via, non riesco ad estrarle token=strtok(testo," "); ho provato anche ad usare il while((token=strtok(testo," "))!='\0')...ma il programma si blocca...ci sarebbe un altra soluzione ?
#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)
{ int j,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;
}
                             

                         

8 Risposte

  • Re: [c] contare parole che terminano in are

    
    char *p = testo;
    while((p = strstr(p,"are")) != NULL)
    {
            ++p;
            conta_parole++;
    }
    
  • Re: [c] contare parole che terminano in are

    Ma

    skynet ha scritto:


    
    char *p = testo;
    while((p = strstr(p,"are")) != NULL)
    {
            ++p;
            conta_parole++;
    }
    
    dovrei usarla al posto
    
    
    if(strncmp(token,"are",3)==0)
    
    ?
  • Re: [c] contare parole che terminano in are

    Era un'esempio. Non ho provato il codice ma la logica dice che funziona.
  • Re: [c] contare parole che terminano in are

    skynet ha scritto:


    era un'esempio. Non ho provato il codice ma la logica dice che funziona.
    sikuramente ma la mia domanda è voglio estrarre le parole successive...siccome
    token=strtok(testo," ");
    mi estrae le lettere solo dalla prima parola, ci sarebbe un altro modo sempre usando la funzione strtok per estrarre le lettere anche per le parole successive?
    io per esempio ho provato while((token=strtok(testo," "))!='\0'), ma nn ho capito perchè si blocca
  • Re: [c] contare parole che terminano in are

    Sbagli ad usare la strtok.. La strtok è una funzione particolare, la prima volta gli devi passare il testo e un array con i separatori ('\n',' ','\t',ecc..) mentre dalla seconda volta in poi gli passi il primo campo nullo (\0) e il secondo campo passe sempre lo stesso array di separatori, questo perchè la funzione dopo la prima attivazione memorizza l'indice in cui si è fermato per poi ripartire da quello successivo.

    Una volta estratta una parola puoi verificare se gli ultimi 3 caratteri sono 'are'..
  • Re: [c] contare parole che terminano in are

    Ma hai capito la funzione strstr cosa fa? trova la prima corrispondenza nell'array passato come parametro e restituisce la posizione dove l'ha trovata. A sto punto incremento di uno la posizione nell'array e li dico cerca di nuovo finche non mi trovi + nulla. Alla fine avrai il conteggio delle corrispondenze trovate. Una riga di codice per fare la stessa cosa che stai cercando di fare con strtok. Bisogna scegliere le funzioni a seconda dei casi e non ho imparato una funzione e faccio tutto con quella.
  • Re: [c] contare parole che terminano in are

    Scusa ma in questo modo conti tutte le parole che contengono 'are' e non solo quelle che terminano in 'are'..
  • Re: [c] contare parole che terminano in are

    Allora ho capito io un tubo . Leggerò con più attenzione la prossima volta.
Devi accedere o registrarti per scrivere nel forum
8 risposte