PDA

Visualizza la versione completa : [c] funzione somma caratteri


livrea
25-09-2012, 16:20
ciao a tutti ho una strut dati formata da char, in particolare il codice del volo una stringa di 7 caratteri formata dalle prime 4 lettere maiuscole e le rimanenti da numeri es: ABCD123.
Adesso devo creare una funzione per calcolare l'indice di un vettore che data dalla formula:
indice =(somma prime 4 lettere in maiuscolo)%n dove n la dimensione del vettore.

ho provato a fare in questo modo


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define FLUSH while(getchar ()!='\0')
#define COD 8
#define STR 30
typedef struct{
char codice[COD];
char cognome[STR], nome[STR];
}tipobaseList;

void LeggiStringa(char s [], unsigned int dim){
unsigned int i=0;
for(i=0; ((s[i]=getchar())!='\n') && i<dim-1; i++)
s[i]='\0';
if(i==dim-1) while(getchar()!='\0');
}

void LeggiCodice(tipobaseList *x){
printf("\nInserisci codice volo: ");
LeggiStringa(x->codice, COD);
}

int Indice(tipobaseList x, int n){
int i=0, k=0, somma=0;
for(i=0; x[i]; i++)
x[i]=toupper(x[i]);
printf("%s",x);
for(k=0; x[k]<4; k++)
somma=(somma+x[k])%n;
return(somma);
}

int main(){
tipobaseList codice_volo;
int n,i ;
printf("\nInserisci lunghezza vettore" );
scanf("%d", &n);
FLUSH;
LeggiCodice(&codice_volo);
i=Indice(codice_volo, n);
printf("l'indice e' %d", i);

system("PAUSE");
return 0;
}



mi da errore:
In function `int Indice(tipobaseList, int)':
no match for 'operator[]' in 'x[i]'

linoma
25-09-2012, 16:33
Il parametro non un vettore di strutture

livrea
25-09-2012, 16:34
Originariamente inviato da linoma
Il parametro non un vettore di strutture

si ma come posso fare?

linoma
25-09-2012, 16:36
Intanto puoi usare un puntatore alla struttura come parametro e poi fai la somma dei vari vettori di caratteri.

livrea
25-09-2012, 16:57
Originariamente inviato da linoma
Intanto puoi usare un puntatore alla struttura come parametro e poi fai la somma dei vari vettori di caratteri.



int Indice(tipobaseList *x, int n){
int i=0, k=0, somma=0;
for(i=0; &x[i]; i++)
&x[i]=toupper(&x[i]);
printf("%s",x);
for(k=0; &x[k]<4; k++)
somma=(somma+&x[k])%n;
return(somma);
}

mi dice invalid conversion from `tipobaseList*' to `int'

ma toupper funzione solo con int?

linoma
25-09-2012, 17:03
La somma di un tuo vettore di char la farei in questo modo



int sommachar(char *p){
int value;

for(int somma = 0;(value = (int)*p++) != 0; )
somma += value;
return somma;
}


non ho capito bene quale somma la tua funzione Indice dovrebbe tirare fuori

livrea
25-09-2012, 17:07
Originariamente inviato da linoma
La somma di un tuo vettore di char la farei in questo modo



int sommachar(char *p){
int value;

for(int somma = 0;(value = (int)*p++) != 0; )
somma += value;
return somma;
}


non ho capito bene quale somma la tua funzione Indice dovrebbe tirare fuori

deve fare la somma delle prime 4 lettere (corrispondente valore in ascii per maiuscolo)

linoma
25-09-2012, 17:08
Ma solo del primo campo della struct?

livrea
25-09-2012, 17:11
Originariamente inviato da linoma
Ma solo del primo campo della struct?
si, solo del char codice

linoma
25-09-2012, 17:43
Dovrebbe andare in questo modo :



int Indice(unsigned char *x, int n){
int i, k, somma;
for(i=somma=0; i<4 && i < n && (k = (int)*x++) != 0; i++)
somma+=toupper(k);
return(somma);
}

Loading