PDA

View Full Version : [C] Non compila


Manugal
02-05-2005, 19:22
Ciao!

Mi sapreste dire cosa c'è che non va in questo listato?

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

int palindroma(char *);

main(){

char a[]="abba";
int result;
result=palindroma(a);
printf("Risultato = %d\n", result);
return 0;
}

int palindroma (char *a){

char *i, *j;

*i=a;
*j=strlen(a)-1;

if(*i++==*j--)
return 1;
else return 0;
}

Non me lo compila mi dice che l'assegnazione *i=a; mi tirerebbe fuori un int senza fare preventivamente un cast. Perché?

DanieleC88
02-05-2005, 20:01
Dicci di preciso che errore ti da. In ogni caso, non vedo il bisogno di dichiarare quella 'i' come puntatore, se poi usi sempre il dereferencing... dichiarala semplicemente come int e tutto andrà bene.

illy
02-05-2005, 20:23
spero che sia solo una cosa di prova perchè non ha senso...
confronti solo la seconda e la penultima lettera....

Manugal
02-05-2005, 21:04
Praticamente confronto la prima e l'ultima lettera in modo tale da controllare se sono uguali. Devo vedere se una stringa è palindroma. Il messaggio era in inglese non mi ricordo come diceva , però dalla traduzione che avevo fatto mi sembrava che dicesse proprio che dovevo fare un cast.

Ziosilvio
02-05-2005, 21:37
Non me lo compila mi dice che l'assegnazione *i=a; mi tirerebbe fuori un int senza fare preventivamente un cast. Perché?
i è un puntatore a char, quindi *i è un char.
Dato che anche a è un puntatore a char, non puoi assegnare a *i il valore di a senza fare un cast.

NA01
02-05-2005, 21:46
l'errore qui è corretto, non puoi piazzare un puntatore su un valore
se vuoi mettere sul serio il valore di i = all'indirizzo di a allora lo devi fare esplicitamente

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

int palindroma(char *);

main(){

char a[]="abba";
int result;
result=palindroma(a);
printf("Risultato = %d\n", result);
return 0;
}

int palindroma (char *a){

char *i, *j;

*i=*a;
*j=strlen(a)-1;

if(*i++==*j--)
return 1;
else return 0;
}


non so a cosa servvisse, quindi ho reso semplicemente il codice sinntatticamente corretto, non so se è quello che vuoi....

confornti j[0]-1 con i[0]??? non so che voglia dire palindorma, ma non ne capisco il senso.


ciao

NA01
02-05-2005, 21:48
Praticamente confronto la prima e l'ultima lettera in modo tale da controllare se sono uguali. Devo vedere se una stringa è palindroma. Il messaggio era in inglese non mi ricordo come diceva , però dalla traduzione che avevo fatto mi sembrava che dicesse proprio che dovevo fare un cast.
allora hai bisogno di controllare se

a[0] == a[strlen(a)-1]

ciao

illy
03-05-2005, 19:50
cmq con questo codice non vedi mica se è palinidroma...fai solo un controllo...e non della prima e l'ultima lettera ma della seconda e penultima...poi se mi sbaglio qualcuno mi dica....

illy
03-05-2005, 19:56
e ho qualche dubbio sull'assegnamento del puntatore j....ma magari sto male :stordita:

VegetaSSJ5
04-05-2005, 16:17
int palindroma (char *a){

char *i, *j;

*i=a;
*j=strlen(a)-1;

if(*i++==*j--)
return 1;
else return 0;
}
ma che hai scritto?? :confused:int palindroma (char *a) {
int i, len;
i=0;
len= strlen(a)-1;
while (a[i++] == a[len--] && i<=len);
if (i<=len) return 0;
else return 1;
}

Manugal
04-05-2005, 21:25
L'ho scritto così perché lo volevo fare tramite puntatori a vettore però mi sa che ho combinato un mezzo casotto :D

Grazie comunque a tutti :)

Ziosilvio
04-05-2005, 22:48
int palindroma (char *a) {
int i, len;
i=0;
len= strlen(a)-1;
while (a[i++] == a[len--] && i<=len);
if (i<=len) return 0;
else return 1;
}
A 'sto punto, diamogli direttamente la forma idiomatica:
int palindroma (char *s)
{
int i,j;

for (i=0,j=strlen(s)-1; i<j && s[i]==s[j]; i++,j--)
;

return i>=j;
}
(Ci si può risparmiare il confronto nel caso i==j, perché se succede, vuol dire che s ha lunghezza dispari.)