|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
[C++] Contare parole e separazione con strtok()
Date 2 frasi.. vorrei contare quante parole della frase 1 siano presenti all'interno della frase 2..(attenzione...parole e non lettere). Le parole all'interno della frase possono essere separate da spazio, trattino o virgola.
Ho pensato di usare la funzione string strtok() che separa ogni parola dalla frase e le memorizza in un array.. Questo per ognuna delle due frasi Il problema è che ad esempio la frase: "ciao come stai"...dovrebbe memorizzarla all'interno dell'array cosi: ciao alla posizione 0, come alla posizione 1, stai alla posizione 2.. e non lettera per lettera..altrimenti non va a vedere le parole uguali..ma mi conta ogni singola lettera. Il mio codice non funzionante... ma che compila: Codice:
#include <iostream>
using namespace std;
void separaparole(char frase [], char array[]){
char *s=strtok(frase, " ");
int i=0;
while(s!=NULL){
array[i]=*s;
i++;
s=strtok(NULL, " ");
}
}
int controlla(char parole1[], char parole2[]){
int conta=0;
for(int i=0; i<strlen(parole1); i++){
for(int k=0; k<strlen(parole2); k++){
if(parole1[i] == parole2[k])
conta++;
}
}
}
int main(){
char fraseA[]={"ciao come stai"};
char fraseB[]={"ciao io bene"};
char arrayA[50], arrayB[50];
separaparole(fraseA, arrayA);
separaparole(fraseB, arrayB);
cout<<controlla(arrayA, arrayB);
system("pause");
return 0;
}
Ultima modifica di mistergks : 16-01-2012 alle 23:59. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Ho dato un'occhiata rapida, e il problema mi pare essenzialmente questo:
Codice:
void separaparole(char frase [], char array[]){
char *s=strtok(frase, " ");
int i=0;
while(s!=NULL){
array[i]=*s;
i++;
s=strtok(NULL, " ");
}
}
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Quote:
Esiste un metodo piu facile di risolvere il problema? char *array[]={"ciao come stai"}; |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Mar 2007
Città: Milano Beach
Messaggi: 1696
|
Ti posto un esempio scritto al volo.
È in C e non in C++, ma la sostanza non cambia. Codice:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int separaParole(char * frase, char * parole[10]);
int main (int argc, char **argv)
{
char frase[100];
memset(frase, 0x00, sizeof(frase));
strcpy(frase, "Contare parole e separazione con strtok");
char * parole[10];
int i, nParole = separaParole(frase, parole);
for (i = 0; i < nParole; ++i){
fprintf(stderr, "%s\n", parole[i]);
}
exit(EXIT_SUCCESS);
}
int separaParole(char * frase, char * parole[10])
{
fprintf(stderr, "[Frase] %s\n\n", frase);
int nParole = 0;
char * ptr = strtok(frase, " ");
while (ptr != NULL)
{
parole[nParole++] = ptr;
ptr = strtok(NULL, " ");
}
return nParole;
}
__________________
~ Cthulhu: MacBookPro 13.3" ~ Azathoth: D510MO |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Mar 2011
Messaggi: 1050
|
Quote:
Codice:
#include <iostream>
using namespace std;
void separaparole(char *frase, char *array[]){
int i=0;
char *s=strtok(frase, " ");
while(s!=NULL){
array[i]=s;
i++;
s=strtok(NULL, " ");
}
}
int controlla(char *parole1[], char *parole2[]){
int conta=0;
for(int i=0; i<strlen(*parole1); i++){
for(int k=0; k<strlen(*parole2); k++){
if(parole1[i] == parole2[k])
conta++;
}
}
}
int main(){
char *fraseA={"ciao come stai"};
char *fraseB={"ciao io bene"};
char *arrayA[100], arrayB[100];
separaparole(*fraseA, *arrayA[]);
separaparole(*fraseB, *arrayB[]);
cout<<controlla(arrayA, arrayB);
system("pause");
return 0;
}
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:57.



















