PDA

Visualizza la versione completa : Esercizio C stavolta sulle stringhe :P


AndrewAbigail
15-02-2010, 22:33
Bene quì da solo già son arrivato ad un buon punto... come sempre traccia:
Sia A un vettore di caratteri di lunghezza N contenente alcune parole (solo lettere maiuscole) separate da uno spazio. Scrivere una funzione che restituisca TRUE se i primi due caratteri di ogni parola corrispondono rispettivamente al primo e all'ultimo carattere della parola precedente.

Esempio N=25
A= |C|A|N|E| |C|E|N|A| |C|A|R|I| |C|I|E|L|O| |C|O|M|O|
Output=TRUE

Questo è il mio programma:

#include <stdio.h>
void primedue(char A[],char primdue[],int i)
{
primdue[0]=A[i];
primdue[1]=A[i+1];
primdue[2]='\0';
}
void primaeultima(char A[],char primult[],int i,int n)
{
primult[0]=A[i];
int j=i;
while(A[i]!=' ')
{
i++;
}
primult[1]=A[i-1];
}
int verifica (char A[],int n)
{
int i,j,b;
float confronto;
char primdue_old[3],primdue[3],primult[3];
for (i=0;i<n;i++)
{
primedue(A,primdue,i);
primaeultima(A,primult,i,n);
//
// Just debugging...
printf ("Stringa: %s Primdue: %s Primult: %s Primdue_old: %s\n",A,primdue,primult,primdue_old);
//
confronto=strcmpi(primdue_old , primult);
if (confronto==0)
b=1;
else
b=0;
for(j=0;j<3;j++)
primdue_old[j]=primdue[j];
}
return (b);
}
int main()
{
int n,b;
printf("Quanto deve essere lungo l'array?\n");
scanf("%d",&n);
n+=1;
char A[n];
printf("Inserire le parole desiderate \n");
while(gets(A)!=NULL)
{
if(gets(A)!=NULL)
{
break;
}
}
b=verifica(A,n);
if (b==1)
printf("TRUE\n");
else
printf("FALSE\n");
system("pause");
return 0;
}

Il problema sostanzialmente credo sia nel fatto che sul ciclo di primaeultima non viene passato il parametro "i" a verifica. La mia domanda è questa, nel momento in cui la variabile "i" passa ad una funzione e viene elaborata, non dovrebbe tornare con lo stesso valore a verifica?

AndrewAbigail
15-02-2010, 22:44
Risolto, grazie comunque a chi avrebbe potuto aiutarmi.
Se v'interessa ecco il codice:



#include <stdio.h>
int i;
void primedue(char A[],char primdue[])
{
primdue[0]=A[i];
primdue[1]=A[i+1];
primdue[2]='\0';
}
void primaeultima(char A[],char primult[])
{
primult[0]=A[i];
while(A[i]!=' ')
{
i++;
}
primult[1]=A[i-1];
}
int verifica (char A[],int n)
{
int j,b;
float confronto;
char primult_old[3],primdue[3],primult[3];
for (i=0;i<n;i++)
{
primedue(A,primdue);
primaeultima(A,primult);
//
// Just debugging...
printf ("Stringa: %s Primdue: %s Primult: %s Primult_old: %s i: %d\n",A,primdue,primult,primult_old,i);
//
confronto=strcmpi(primult_old , primdue);
if (confronto==0)
b=1;
else
b=0;
for(j=0;j<3;j++)
primult_old[j]=primult[j];
}
return (b);
}
int main()
{
int n,b;
printf("Quanto deve essere lungo l'array?\n");
scanf("%d",&n);
n+=1;
char A[n];
printf("Inserire le parole desiderate \n");
while(gets(A)!=NULL)
{
if(gets(A)!=NULL)
{
break;
}
}
b=verifica(A,n);
if (b==1)
printf("TRUE\n");
else
printf("FALSE\n");
system("pause");
return 0;
}

Loading