Conteggio di un carattere in una parola/frase

Stato
Discussione chiusa ad ulteriori risposte.

R4z0r_Cr4sH

Utente Electrum
10 Giugno 2007
501
11
6
148
Dato in ingresso un carattere e una stringa (separatamente) determinare quante volte il carattere appare nell’input dell’utente.Ad esempio, dato il carattere ’a’, se l’utente immette 'abbinamento' allora il programma dovrà comunicare che il carattere 'a' è presente 2 volte...

in java:
Codice:
public CercaCarattere(String a,String frase){
        int n=0;
        for(int i=0;i<frase.length();i++){
            String s=""+frase.charAt(i);
            if(s.equals(a)){
                n++;   
            }
        }
        System.out.println("Nella frase "+frase+" il carattere "+a+" compare "+n+" volte.");
    }

edit: mi ero dimenticato di averlo fatto anche in assembly :D...eccolo qua:
Codice:
;autore: R4z0r_Cr4$H

DOSSEG
.MODEL SMALL
.DATA

s_a db 10,13,'Questo programma controlla in una frase quante volte è presente un carattere.',10,13,10,13,'$'
s_f db 10,13,'Inserisci la frase da analizzare (invio per analizzare, - per terminare) :$'
s_c db 10,13,'Inserisci il carattere da cercare nella stringa ( - per terminare) :$'
s_e db  10,13,'Valore errato!',10,13,'$'

.CODE
inizio: mov AX, @DATA
        mov DS, AX

	mov ch,48
		
		
	mov ah, 9
        mov dx,offset s_a
        int 21h

 fase1: mov ah, 9 
        mov dx,offset s_c 
        int 21h 

        mov AH,01h  
        int 21h  

        cmp al,45     
        je fine              
        mov cl,al           

        mov ah, 9            
        mov dx,offset s_f    
        int 21h             

      f:mov AH,01h     
        int 21h           
	   

	cmp al,20h
	je c
        cmp al,13
        je v
        cmp al,65           
        jb p1             
        cmp al,122  
        ja p1 
      c:cmp al,cl
        jne f
        inc ch
        jmp f


     p1:mov ah, 9     
        mov dx,offset s_e  
        int 21h   
        jmp fase1

      v:mov dl,10
        mov ah,02h
	int 21h
	mov dl,13
	mov ah,02h
	int 21h
	mov dl,ch
	mov ah,02h
	int 21h



fine: mov AH, 4Ch
      int 21h
      end inizio
 
[Python]
Codice:
#!/usr/bin/python
car=raw_input("Inserisci un carattere da cercare: ")
car=car.lower()
print car
if len(car)==1:
    string=raw_input("Inserisci la stringa in cui cercarlo: ")
    string=list(string.lower())
    print string
    global cont
    cont=0
    for i in range(0, len(string)):
        if car==string[i]:
            cont=cont+1
    print "Il carattere sta nella stringa", cont, "volte"
else:
    print "L'input immesso non è un carattere"
 
In PHP:
PHP:
$carattere=$_GET['carattere'];
$stringa=$_GET['stringa'];
if(!$carattere or !$stringa) {
die('Uso: page.php?carattere=a&stringa=analfabeta');
}
$conteggio=0;
for ($i=0;$i<strlen($stringa);$i++) {
if ($stringa[$i] == $carattere) {$conteggio++;}
}
echo 'Il carattere sta nella stringa '.$conteggio.' volte/volta';
 
sydarex magari anche in altri linguaggi c'è una funziona apposita per contare i caratteri in una parola/Stringa ma gli esercizi servono per sviluppare nuovi metodi...:D
 
R4z0r_Cr4$H ha detto:
sydarex magari anche in altri linguaggi c'è una funziona apposita per contare i caratteri in una parola/Stringa ma gli esercizi servono per sviluppare nuovi metodi...:D
Non ci sono molti metodi per fare una cosa del genere.
L'unico metodo è un for che cicla per ogni carattere di una stringa, e infatti la funzione count opera così.
La differenza è che fare un for a mano è più dispendioso in termini di tempo umano e tempo macchina durante l'esecuzione.

Comunque, un buon programmatore non è chi sa fare un for per una stringa :)asd:), bensì chi sa usare al meglio gli strumenti messi a disposizione dal linguaggio che usa.
La soluzione migliore è usare count(), perciò ho usato quella.
 
si ma di certo non aspettavamo te per capire queste cose e usare il metodo count()...se no postiamo solo la documentazione dei linguaggi e la sezione la chiudiamo perchè non serve più a niente!
 
R4z0r_Cr4$H ha detto:
si ma di certo non aspettavamo te per capire queste cose e usare il metodo count()...se no postiamo solo la documentazione dei linguaggi e la sezione la chiudiamo perchè non serve più a niente!
Mmh, forse non ci capiamo.
Un esercizio di programmazione come questo io lo vedo come "trova la soluzione migliore, più veloce ed efficente".
E questa ho scritto.

Non è che l'ho fatto per spiegare qualcosa a qualcuno: la count() non ha niente da insegnare, come non ha nulla da insegnare un for.
Come non ha nulla da insegnare un esercizio così semplice, per dirla più in generale.

Mi pare evidente che la pensi diversamente, pur non avendo compreso come.
Se vuoi spiegarti..

Anche se credo siamo OT, qui. :look:
 
[perl (of course) ]
Codice:
#!/usr/bin/perl
print "inserisci il carattere da cercare: ";
$char = <stdin>;
chomp $char;
$char =~ tr/A-Z/a-z/; 
if (length($char) == 1) {
print "inserisci la stringa in cui cercare il carattere: ";
$str = <stdin>;
chomp $str;
$str =~ tr/A-Z/a-z/;
@string = split //,$str;
$count = 0;
for ($i=0;$i<length($str);$i++) {
$count += 1 if ($char eq $string[$i])
}
print "il carattere compare nella stringa $count volte\n";
} else {
print "Non hai inserito un carattere valido\n"
}
 
Stato
Discussione chiusa ad ulteriori risposte.