Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Esercizio C stavolta sulle stringhe :P

    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:
    codice:
    #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?

  2. #2
    Risolto, grazie comunque a chi avrebbe potuto aiutarmi.
    Se v'interessa ecco il codice:

    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;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.