Buonasera a tutti,
sono nuovo qui sul forum dato che ho iniziato da poco a programmare siccome devo affrontare l'esame di Fondamenti di Informatica a breve.
Ho un problema con un esercizio: il testo mi chiede di scrivere un programma che permetta all'utente di scrivere una parola (o comunque una sequenza di caratteri, max 100), di seguito il programma dovrà visualizzare a schermo quante volte compaiono le lettere nella parola scritta(per esempio, inserita la parola "cassa", il programma dovrà visualizzare a schermo che la lettera "c" compare una volta sola, la lettera "s" invece due volte, ecc.).
Ho strutturato il programma in modo che una volta inserita la parola, ne vengano contati i caratteri tramite la funzione strlen, il tutto memorizzato in una variabile intera.
Successivamente richiamo una funzione che mi restituisci un puntatore: tale puntatore riconduce ad un array, che ha le stesse dimensioni dell'array che contiene la parola inserita.
La funzione che ho scritto in teoria dovrebbe permettermi di confrontare ogni cella dell'array contenente la parola con le altre celle, inclusa se stessa. Ogni volta che due celle risultano identiche, il valore della cella dell'array "vettore_numerativo[NUM]" corrispondente alla posizione della lettera in esame viene aumentato di 1, mi spiego: inserendo la parola "ciao", in teoria la funzione dovrebbe confrontare una per una le lettere tra di loro, a partire dalla prima. Quindi, la funzione prende la lettera "c" e la confronta con se stessa, con "i", con "a" e con "o", poi prende la lettera "i" e ripete il ciclo. Ogni volta che due lettere risultano identiche, la cella dell'array "vettore_numerativo[NUM]" corrispondente alla posizione della lettera esaminata, viene incrementata di 1.
Il programma è questo:
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LET 100
int *cardinalitalettere(char *p, int NUM) {
int i, k, t;
int vettore_numerativo[NUM];
int *v;
v = vettore_numerativo;
for (t = 0; t < NUM; t++) {
v[t] = 0;
}
for (i = 0; i < NUM; i++) {
for(k = 0; k < NUM; k++) {
if (p[i] == p[k]) {
v[i] = v[i] + 1;
}
}
}
return v;
}
int main() {
char s[MAX_LET];
int NUM, i;
int *c;
printf("Inserire una frase composta sia da lettere minuscole che maiuscole, con al massimo %d caratteri:\n", MAX_LET);
scanf("%s", s);
NUM = strlen(s);
c = cardinalitalettere(s, NUM);
printf("La numerosità delle lettere nella parola inserita è la seguente:\n");
for (i = 0; i < NUM; i++) {
printf("%c --> %d\n", s[i], c[i]);
printf("\n");
}
return 0;
}
Il problema è che, una volto che lo eseguo, i valori che restituisce la funzione sono sballati e anche randomici, nel senso che eseguendo più volte il programma ed immettendo sempre la stessa parola, vengono stampati a schermo valori sempre differenti tra di loro.
Due esempi:
codice:
Inserire una frase composta sia da lettere minuscole che maiuscole, con al massimo 100 caratteri:
ciao
La numerosità delle lettere nella parola inserita è la seguente:
c --> 0
i --> 0
a --> 1279985408
o --> 32766
codice:
Inserire una frase composta sia da lettere minuscole che maiuscole, con al massimo 100 caratteri:
ciao
La numerosità delle lettere nella parola inserita è la seguente:
c --> 0
i --> 0
a --> -1997601392
o --> 32764
L'ho riguardato più volte ma non riesco a capire dov'è l'errore.
Se poteste aiutarmi mi sareste di grande aiuto.
Grazie in anticipo,
Samuele