View Full Version : [C]Contare parole in una stringa
ragazzi sono un cane non malmenatemi:D
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
main()
{
int i, spazio;
char frase[MAX];
printf("Inserire una stringa, le cui parole sono intervallate da spazi: ");
scanf("%s", frase);
fflush(stdin);
spazio = 0;
for(i=0;i<strlen(frase);i++)
if(frase[i] == ' ')
spazio++;
if(spazio>0)
printf("Il numero delle parole presenti nella stringa e': %d\n", spazio+1);
else
printf("Non ci sono spazi nella stringa\n");
system("pause");
}
come mai non mi funza?ciao!
wizard1993
28-04-2008, 10:58
questa libreria funziona molto bene; guardatela
http://www.koders.com/c/fidF4F66D79091AFA1BDB8A26773CD64C8EB2D3CE4F.aspx
mi da sempre 0!!!!
se provo a mettere printf sotto all'incremento di spazio, come controllo mi da sempre 0..
forse un problema nell'acquisire la stringa?
vincenzo83
28-04-2008, 11:16
Prova a sostituire questo: if(frase[i] == ' ') con if(frase[i] == '\b')
Vedi se trovi qualcosa di utile qui: http://users.dimi.uniud.it/~ivan.scagnetto/LABSO/lezione10.pdf
ottime dispense!
ce ne sono altre..ho provato ad accedere tramite ivan scagnetti ma non trovo nulla li dentro..ciao!:)
ora provo come dici te
no con barra \b non cambia nulla...
cmq ho provato così
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
int conta_parole()
{
int i, spazio;
char frase[MAX];
strcpy(frase, "ciao mare bello");
spazio = 0;
for(i=0;i<strlen(frase);i++)
if(frase[i] == ' ')
spazio += 1;
return spazio;
}
main()
{
int conta;
conta = conta_parole();
if(conta)
printf("Il numero delle parole presenti nella stringa e': %d\n", conta+1);
else
printf("Non ci sono spazi nella stringa\n");
system("pause");
}
così funza...c'è un problema nell'acquisizione dello scanf forse gli spazi gli rompono gli zebedei:D
ah ok...grazie!
ora cerco:D
grogdunn
28-04-2008, 15:52
prova a fare magari una lettura più brutta stilisticamente ma con il getchar() o il getch() (non ricordo le sottili differenze tra i 2)... con questi di sicuro ti prende gli spazi e tutto il resto
frizzo28
28-04-2008, 17:40
oppure usa la gets() che serve per aquisire una stringa anche se mi sa che non e' standard mi sa che c'e' solo su turbo c++
Energy++
28-04-2008, 18:04
oppure usa la gets() che serve per aquisire una stringa anche se mi sa che non e' standard mi sa che c'e' solo su turbo c++
no, non è solo per il turbo c++, mi pare si trovi in <conio.h>
wizard1993
28-04-2008, 18:37
no, non è solo per il turbo c++, mi pare si trovi in <conio.h>
e guarda caso la conio è la libreria non standard ;)
Energy++
28-04-2008, 19:30
e guarda caso la conio è la libreria non standard ;)
non ho detto che è standard, mi riferivo che non c'è solo nel turbo c++ :read:
Sicuramente con scanf (come con cin) non può funzionare, in quanto si ferma al primo spazio acquisito.
In C++ io risolverei sostituendo il cin con cin.get() specificando ovviamente una variabile char* d'appoggio e un numero di caratteri massimo.
Mi auguro che qualche conoscitore del C sappia tradurre in codice C :sofico:
prova a fare magari una lettura più brutta stilisticamente ma con il getchar() o il getch() (non ricordo le sottili differenze tra i 2)... con questi di sicuro ti prende gli spazi e tutto il resto
con strcpy brutto da morire stilisticamente funza, proverò getchar
Sicuramente con scanf (come con cin) non può funzionare, in quanto si ferma al primo spazio acquisito.
In C++ io risolverei sostituendo il cin con cin.get() specificando ovviamente una variabile char* d'appoggio e un numero di caratteri massimo.
Mi auguro che qualche conoscitore del C sappia tradurre in codice C :sofico:
speriamo:D
deadlyomen17
28-04-2008, 20:55
io in c++ userei un cin.getline per acquisire la frase, e la funziona strtok per contare le parole...(è in cstring)
DanieleC88
28-04-2008, 22:11
http://linux.about.com/library/cmd/blcmdl3_getline.htm
frizzo28
29-04-2008, 22:59
e guarda caso la conio è la libreria non standard ;)
Si e' vero stavo vedendo or ora che c'e' pure su dev c++
@Lucuzzu Che compilatore usi?
Tipo su dev c++ mi e' bastato predere il codice postato nel primo post e modificarlo cosi'(ho cambiato solo lo scanf con una gets)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
main()
{
int i, spazio;
char frase[MAX];
printf("Inserire una stringa, le cui parole sono intervallate da spazi: ");
gets(frase);
fflush(stdin);
spazio = 0;
for(i=0;i<strlen(frase);i++)
if(frase[i] == ' ')
spazio++;
if(spazio>0)
printf("Il numero delle parole presenti nella stringa e': %d\n", spazio+1);
else
printf("Non ci sono spazi nella stringa\n");
system("pause");
}
e mi funziona
DanieleC88
29-04-2008, 23:06
Il problema è che gets() è abbastanza insicura come funzione, getline() già è una migliore scelta.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.