PDA

Visualizza la versione completa : [C] Contare il numero di lettere vicine che sono uguali


21Edoardo96
11-01-2012, 20:39
Ciao,
ho scritto questo programmino che conta il numero di lettere di una stringa, però non sò proprio come fare a contare quante sono le lettere simili che si stovano vicine.
Esempio: abbcccbb ,il programma deve far apparire a schermo cheil numero massimo di lettere simili che si susseguono è 3 ossia le 3 c e non deve dire che sono 4 ossia 2b + 2 b.
qualcuno potrebbe cortesemente spiegarmelo'


#include <stdio.h>
int main()
{
char l=0;
int num=0;
printf("Inserite la parola o la frase:");
while(l!='\n')
{
scanf("%c",&l);
if((l>=65 && l<=90) || (l>=97 && l<=122) && (l!=32))
{
num++;
}
else
{
}
if(l==32 || l==10)
{
if(num)
{
printf("Il numero di lettere e\': %d",num);
}
else
{
num=0;
}
}
}
system("pause");
return 0;
}

ciao e grazie

21Edoardo96
11-01-2012, 21:22
Ciao,
ho modificato solo poche cose ma il problema rimane sempre lo stesso


#include <stdio.h>
int main()
{
char l=0;
int num=0;
printf("Inserite la parola o la frase (premere invio per terminare):");
while(l!='\n')
{
scanf("%c",&l);
if((l>=65 && l<=90) || (l>=97 && l<=122) && (l!=32))//Dal 65 al 90 sono comprese tutte le lettere maiuscole, dal a 97 al 122
// tutte le lettere minuscole il 32 è l'invio
{
num++;
}
else
{
}
if(l==32 || l==10) //il 10 è lo spazio
{
if(num)
{
printf("Il numero di lettere e\': %d",num);
}
else
{
num=0;
}
}
}
printf("\n");
system("pause");
return 0;
}

Ciao e grazie

pr0web
11-01-2012, 21:24
potresti farlo in questo modo: int cont, int max e char lett.
cont: conta le lettere uguali vicine e la fine facendo il confronto con il max, se invece fosse maggiore allora sarebbe max=cont.
char lett è la lettera che ha cont maggiore...
In fine stampi int max e char lett.

Spero che mi sono spiegato :D

21Edoardo96
11-01-2012, 21:28
Si ti sei spiegato perfettamente ma visto che sono ancora ai primi esercizzi e non so ancora molte cose non so bene come scriverlo.
potresti cortesemnete farmi vedere le correzioni (sempre che tu ne abbia tempo e soprattutto voglia)
ciao e grazie mille

oregon
11-01-2012, 22:19
Prova sempre a scrivere tu il codice. Non correggere questo.

Parti dal fatto di avere già a disposizione una stringa su cui operare ... lascia stare l'input, per ora.

21Edoardo96
11-01-2012, 22:23
Ok ci proverò domani e vi faro' vedere ciò che ho scritto in modo da capire meglio dove sbaglio. Grazie mille per l'aiuto che mi state dando
Ciao

21Edoardo96
12-01-2012, 16:32
Ciao
ho riscritto il codice del programma ma non funziona lo stesso, anche se non ci sono errori nella sintassi (almeno questi mi viene detto dal compilatore).
Il problema è che non fa il paragone e di conseguenza non conta il numero di vollte in cui la lettera si ripete.


#include <stdio.h>
int main()
{
char l=0, let=0;
int num=0, con=0, max=0;
printf("Inserite la parola o la frase (premere invio per terminare):");
while(l!='\n')
{
scanf("%c",&l);
if((l>=65 && l<=90) || (l>=97 && l<=122) && (l!=32))//Dal 65 al 90 sono comprese tutte le lettere maiuscole, dal a 97 al 122
// tutte le lettere minuscole il 32 è l'invio
{
num++;
}
else
{
}
if(l==32 || l==10) //il 10 è lo spazio
{
if(num)
{
printf("\nIl numero di lettere e\': %d",num);
}
else
{
num=0;
}
}
else
{
if(let==l)
{
con++;
}
else
{
let==l; //La lettera di paragone diventa la nuova lettera
con=0;
}
}
}
printf("\n\n");
printf("La lettera che si ripete piu\' volte e\' la %c e si ripete %d volte", let,con);
printf("\n\n");
system("pause");
return 0;
}

Ciao e grazie :ciauz:

MItaly
12-01-2012, 16:36
Per forza non funziona, non stai usando max... Quando finisce una serie consecutiva della stessa lettera, prima di azzerare con e aggiornare let devi confrontare il numero di occorrenze contate con max, e se è superiore al valore attuale, sostituire max con con:


char l=0, let=0, maxLet;
...
else
{
if(con>=max)
{
max=con;
maxLet=let;
}
let=l; //La lettera di paragone diventa la nuova lettera
con=0;
}
}
}
printf("\n\n");
printf("La lettera che si ripete piu' volte e' la %c e si ripete %d volte", maxLet,max);
printf("\n\n");

Tra l'altro, perché scrivi direttamente i numeri dei caratteri? Usa più semplicemente i char literal:


if((l>='A' && l<='Z') || (l>='a' && l<='z') && (l!=' '))

21Edoardo96
12-01-2012, 17:00
Ciao,
ho cercato di fare cio che mi avevi scritto, ma siccome sono ancora molto scarso in materia, mi sa proprio di aver sbagliato ancora qualcosa, perchè nell'ultim printf non mi appare nessun valore e in più nella printf che dice \nIl numero di lettere e': %d",num mi appaiono dopo ogni ripetizione del ciclo la somma di tutte le lettere e non quelle che formano ogni singola parola.


#include <stdio.h>
int main()
{
char l=0, let=0;
int num=0, con=0, max=0, maxLet;
printf("Inserite la parola o la frase (premere invio per terminare):");
while(l!='\n')
{
scanf("%c",&l);
if((l>='A' && l<='Z') || (l>='a' && l<='z') && (l!=' '))//char literal
{
num++;
}
else
{
}
if(l==' ' || l==10) //il 10 è lo spazio
{
if(num)
{
printf("\nIl numero di lettere e\': %d",num);
}
else
{
num=0;
}
}
else
{
if(con>=max)
{
max=con;
maxLet=let;
}
else
{
let==l; //La lettera di paragone diventa la nuova lettera
con=0;
}
}
}
printf("\n\n");
printf("La lettera che si ripete piu\' volte e\' la %c e si ripete %d volte", maxLet,max);
printf("\n\n");
system("pause");
return 0;
}

Ciao e grazie

21Edoardo96
17-01-2012, 18:54
Ciao,
ho messo il do-while come controllo dell'input (però risulta sbagliato) e in più ho tolto le parentesi graffe non cesessarie (in modo tale da essere più facile da leggere):


#include <stdio.h>
int main()
{
char l=0, let=0;
int num=0, con=0, max=0, maxLet, i=0;
while(l!='\n')
{
do
{
printf("Inserite la parola o la frase (premere invio per terminare):");
scanf("%c",&l);
i++;
}
while((l>='A' && l<='Z') || (l>='a' && l<='z') && (l!=' ')); //char literal, il ' ' è l'invio
num++;
if(l==' ' || l==10) //il 10 è lo spazio
{
if(num)
printf("\nIl numero di lettere e\': %d",num);
else
num=0;
}
else
{
if(con>=max)
{
max=con;
maxLet=let;
}
else
{
let==l; //La lettera di paragone diventa la nuova lettera
con=0;
}
}
}
printf("\n\n");
printf("La lettera che si ripete piu\' volte e\' la %c e si ripete %d volte", maxLet,max);
printf("\n\n");
system("pause");
return 0;
}

Come posso fare per cercare di risolvere almeno uno di questi problemi.
Ciao e grazie

Loading