Implementare la funzione int conta(char* str) che stampa a video la frequenza di ogni carattere alfabetico
contenuto nella stringa e restituisce la lunghezza della stringa stessa str.
Per esempio, nel caso str = ``Amaca'' la funzione dovrebbe ritornare il valore 5 e stampare a video ``3A1M1C''.
Note
La funzione deve essere case-insensitive, ovvero non deve fare distinzione tra caratteri maiuscoli e minuscoli.
Non e' possibile utilizzare la funzione int strlen(char* s);
E' possibile utilizzare le funzioni char toupper(char x) e int isalpha(char x) (ctype.h);
Non implementare funzioni non necessarie o non esplicitamente richieste.
Esempi:
conta("1") non stampa nulla e ritorna ) 1
conta("a") stampa "1A" e ritorna ) 1
conta("1a") stampa "1A" e ritorna ) 2
conta("AMA") stampa "2A1M" e ritorna ) 3
conta("Mamma") stampa "3M2A" e ritorna ) 5
Implementare una funzione main che legga la stringa str (scanf). La funzione stampa a video la stringa letta,
quindi stampa il risultato di conta(str).
io ho provato a ragionarci su.. ne è uscito un programma che funziona, benché il suo funzionamento sia da suicidio (non so cosa mi sono fumato).. volevo sapere se avevate consigli o trucchi per "snellire" la corposità del codice..
#include<stdio.h>
#include<ctype.h>
#define MAX 300
int len(char *s)
{
int i=0;
while (s[i]!='\0')
i++;
return i;
}
main()
{
char str[MAX];
printf("inserisci stringa:\n");
scanf("%s", str);
printf("la funzione ritorna %d\n", conta(str));
return 0;
}
void speciali(char *s)
{
int i=0, j=0;
for(i=0;i<len(s);i++)
{
if (isalpha(s[i])==0) //non è una lettera
{
for(j=i;j<len(s)-1;j++)
{
s[j]=s[j+1];
}
s[j]='\0';
i=0;
}
}
}
int conta(char* str)
{
int j,k,cont;
cont=1;
int i=0;
while (str[i]!='\0')
i++;
for (j=0;j<len(str);j++)
{
if (isalpha(str[j])) //eseguo solo se è una lettera!!!!
{
cont=1;
for (k=j+1;k<len(str);k++)
{
if (str[j] == str[k])
{
cont++;
str[k]='0';
}
}
printf("\n%d%c\n", cont, str[j]);
}
}
return i;
}
la funzione void speciali è lì perché pensavo di usarla ma alla fine non è servita.. ignoratela!!
grazie a tutti e buona giornata!!!