È vero, vedo di cambiare il codice in modo da ridurne la complessita.
Mentre per il codice realizzato in precedenza ,che comunque dovrebbe portare ugualmente alla soluzione, ho modificato il codice in modo tale che il vettore Stringa2 possa avere una dimensione variabile attraverso la funzione malloc.
Il programma funziona però ho questi warning che non riesco a risolvere.
\esercitazione 4 marzo\main.c||In function 'main':|
\esercitazione 4 marzo\main.c|19|warning: passing argument 1 of 'AllocazioneDinamicaStringa2' from incompatible pointer type [-Wincompatible-pointer-types]|
\esercitazione 4 marzo\main.c|6|note: expected 'char *' but argument is of type 'char **'|
\esercitazione 4 marzo\main.c|21|warning: passing argument 2 of 'CopiaStringa1InStringa2' from incompatible pointer type [-Wincompatible-pointer-types]|
\esercitazione 4 marzo\main.c|7|note: expected 'char *' but argument is of type 'char **'|
\esercitazione 4 marzo\main.c|22|warning: passing argument 1 of 'InvertiStringa2' from incompatible pointer type [-Wincompatible-pointer-types]|
\esercitazione 4 marzo\main.c|8|note: expected 'char *' but argument is of type 'char **'|
\esercitazione 4 marzo\main.c|23|warning: passing argument 2 of 'StampaEsito' from incompatible pointer type [-Wincompatible-pointer-types]|
\esercitazione 4 marzo\main.c|9|note: expected 'char *' but argument is of type 'char **'|
questo è il codice del programma:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int CalcolaDimensioneStringa1(char Stringa1[]);
void AllocazioneDinamicaStringa2(char *Stringa2,int dim);
void CopiaStringa1InStringa2(char Stringa1[],char *Stringa2);
void InvertiStringa2(char *Stringa2,int dim);
void StampaEsito(char Stringa1[],char *Stringa2);
int main()
{
char Stringa1[] = "kayak";
int dim;
dim = CalcolaDimensioneStringa1(Stringa1);
char *Stringa2;
AllocazioneDinamicaStringa2(&Stringa2,dim);
CopiaStringa1InStringa2(Stringa1,&Stringa2);
InvertiStringa2(&Stringa2,dim);
StampaEsito(Stringa1,&Stringa2);
return 0;
}
int CalcolaDimensioneStringa1(char Stringa1[]){
int numC;
numC = strlen(Stringa1); //la dimensione non tiene conto del carattere di fine stringa
return numC;
}
void AllocazioneDinamicaStringa2(char *Stringa2,int dim){
Stringa2 = (char*)malloc(dim*sizeof(char)); //la Stringa2 non ha bisogno di un carattere di fine stringa
}
void CopiaStringa1InStringa2(char Stringa1[],char *Stringa2){
strcpy(Stringa2, Stringa1);
}
void InvertiStringa2(char *Stringa2,int dim){
char app;
int i = 0;
int j = dim-1;
while (i<dim/2)
{
app = *(Stringa2+i);
*(Stringa2+i) = *(Stringa2+j);
*(Stringa2+j) = app;
j = j - 1;
i = i + 1;
}
}
void StampaEsito(char Stringa1[],char *Stringa2){
if (strcmp(Stringa1,Stringa2)==0)
printf("La stringa e' palindroma");
else printf("La stringa non e' palindroma");
}