conto parole in una frase

Stato
Discussione chiusa ad ulteriori risposte.

R4z0r_Cr4sH

Utente Electrum
10 Giugno 2007
501
11
6
148
Realizzi un programma che legge da tastiera una frase e stampa il numero di parole in essa contenute (possibilmente senza utilizzare funzioni apposite).
in java utilizzando la classe apposita:
Codice:
public void contaParole(){
        BufferedReader t=new BufferedReader(new InputStreamReader(System.in));
        try{
            String f=t.readLine();
            StringTokenizer st=new StringTokenizer(f," ");
            System.out.println(st.countTokens());
        }catch(Exception e){} 
    }

senza utilizzare la classe apposita:

Codice:
public void contaParole(){
        BufferedReader t=new BufferedReader(new InputStreamReader(System.in));
        int count=0;
        try{
            String f=t.readLine();
            for(int i=0;i<f.length();i++){
                String ss=""+f.charAt(i);
                if(ss.equals(" ")){
                    count++;
                }
            }
            System.out.println("Le parole nella frase inserita sono "+(count+1));
        }catch(Exception e){} 
    }
 
Allora ne posto le due versioni.
Python (con i metodi appositi):
Codice:
from sys import argv
words = argv[1].split()
print len(words)
Python (senza i metodi appositi):
Codice:
from sys import argv
words = 0
for i in (argv[1]): words += 1 if i==' ' else 0
print words+1
 
[Python]
Codice:
#!/usr/bin/pyhton
phrase=raw_input("Inserisci la frase: ")
phrase=phrase.rstrip()
global tot
tot=0
for i in phrase:
    if i==' ':
        tot+=1
print tot+1
Diciamo un metodo un po alternativo ma efficace, conta gli spazi in una frase (tra due parole c'è sempre uno spazio) e poi ne aggiunge uno (l'ultima parola, che non è seguita da uno spazio).
Per evitare di farlo sballare ho messo una funzione simil chomp del Perl, così nessuno aggiunge spazi in coda...
 
[-PHP]
PHP:
<?php
$string=urlencode($_GET['string']);
if (!urldecode($string)){
	exit;
}
$tmp=split('\+',$string);
function conta($array){$c=0;foreach ($array as $val){$c++;}return $c;}
$counter=conta($tmp);
$parola = ($counter == 1) ? 'c\'e\' %s parola' : 'ci sono %s parole';
echo sprintf('Nella frase che hai dato (%s) '.$parola,htmlspecialchars(urldecode($string)),(string) $counter); 
?>
 
con i metodi built-in in una riga:
Codice:
print len(raw_input("Inserisci la frase ").split())

altrimenti ecco, legge anche gli altri whitespace (\n, \t etc)
Codice:
from string import whitespace
a=raw_input("Inserisci la frase "); count=1; p=False
for i in a:
    if i in whitespace:
        if (not ((a[a.index(i)+1] in whitespace) or (a[a.index(i)-1] in whitespace))) or p:
            count+=1
            p=False
        else:
            p=True
print count

è fatto un po' male e di fretta, nn l'ho neanche testato
 
Codice:
#!/usr/bin/perl
print "please insert the phrase: " ;
$frase = <stdin>;
chomp $frase;
@frase = split //,$frase;
$count=1;
for ($i=0;$i<length($frase);$i++) {
if ($frase[$i] eq " ") {$count++}
}
if ($frase[$#frase] eq " ") {$count--}
print "the phrase has $count words\n";
 
alcuni dei codici riportati hanno un problema, ovvero se incotrano parole separate da piu' di uno spazio aumentano erroneamente il contatore,
inoltre se ci sono degli invii non vengono conteggiate le parole dopo.

Propongo la mia soluzione in VB
Codice:
Function ContaParole(Testo As String) As Long
Dim Temp() As String
Dim i As Integer
Testo = Replace(Testo, vbCrLf, " ")
Temp = Split(Testo, " ")
For i = 0 To UBound(Temp)
    If Temp(i) <> "" Then
        ContaParole = ContaParole + 1
    End If
Next i
End Function
da richiamare per esempio cosi'
Codice:
MegBox (ContaParole("prova di testo       che conta le   parole"))
il codice qui sopra conta correttamente le parole anche se separate da piu' spazi o da invii.

Preddy
 
Stato
Discussione chiusa ad ulteriori risposte.