PDA

View Full Version : [C]Contare parole in una stringa


Lucuzzu
28-04-2008, 10:29
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

Lucuzzu
28-04-2008, 11:07
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

Lucuzzu
28-04-2008, 11:27
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

Lucuzzu
28-04-2008, 11:35
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

Lucuzzu
28-04-2008, 11:52
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:

Albi89
28-04-2008, 20:03
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:

Lucuzzu
28-04-2008, 20:50
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.