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

    [C] Domanda Banale su stringhe

    Ciao ho una domanda banalissima ma che mi sta facendo uscire pazzo.

    in pratica devo salvare il primo carattere di un array di caratteri in una variabile per salvarmelo.

    Se faccio:

    char save = s[ 0 ];

    con save variabile ausiliaria per il salvataggio del primo carattere ed s[ 0 ] primo carattere dell'array di tipo char non mi salva niente e non capisco il perchè.

    Dopo mi ordino l'array di caratteri e devo effettuare un confronto tra la variabile ausiliaria e l'array ordinato in modo da trovarmi la sua posizione ed esportarla al programma chiamante.

    In pratica mi serve sapere, una volta ordinato l'array di caratteri, la posizione che occupa il primo carattere dopo averlo ordinato.

    se ho: m u c a h z g odinandolo avrò:
    a c g h m u z

    la m che era il primo carattere si trova in posizione 4 e devo ritornare questo valore.

    Grazie!
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E qual è il codice che ti dà problemi?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    codice:
    int posizPrimoCarattere( stringa s, int r, int ppc )
    {
        int register i, j;
        int hold;
        stringa sSupport;
        
        strncpy( sSupport, s, 2 );
        
        printf("\n\nIl primo carattere della stringa e' %c", sSupport[ 1 ]);
          
        printf("\n\nOrdino la stringa di caratteri...\n");
        for( i = 1; i < r; i++ )
        {
             for( j = 0; j < r; j++ )
             {
                  if( s[ j ] > s[ j + 1 ] )
                  {
                      swap( &s[ j ], &s[ j + 1 ] );
                  }
             }
        }
        
        for( i = 0; i <= r; i++ )
        { 
              printf("%c ", s[ i ] );
        }
        
        for( i = 0; i <= r; i++ )
        {
             if( s[ i ] == sSupport[ 1 ] )
             {
                 ppc = i-1;
                 printf("\n\nLa posizione ordinata del primo carattere e' in posizione %d", ppc );
                 break;
             }
        }
        return ppc;
    }
    Ieri ho provato ancora e ci sono riuscito con strncpy( sSupport, s, 2 );
    Però mi sembra un metodo un pò sporco, infatti per tornare il valore ppc esatto devo sottrarre (i-1) forse mi confondo col tappo '\0' della stringa.

    Ma un'operazione del tipo:

    #define NMAX 30
    char s[ NMAX ];
    char save = s[ 0 ];

    è tollerata in C ?
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ovviamente quelle istruzioni funzionano (ma se le scrivi una dopo l'altra ovviamente save avrà un valore casuale dato che la stringa sorgente non è inizializzata).

    Possiamo provare il codice che non ti funzionava, *completo* ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    codice:
    void leggiStringa( stringa s, int r )
    {
         int register i;
         
         printf("Inserisci i %d caratteri della stringa:\n", r);
         
         for( i = 0; i <= r; i++ )
         {
              scanf("%c", &s[ i ] );
         }
         
    }
    
    void stampaStringa( stringa s, int r )
    {
         int register i;
         
         printf("\n\nStampo la stringa inserita...\n\n");
          
         printf(" "); // spazio di tabulazione per allineare l'indice al corrispettivo carattere
          
         for( i = 0; i < r; i++ )
         {
              printf("%d ", i );
         }
         
         printf("\n"); 
              
         for( i = 0; i <= r; i++ )
         { 
              printf("%c ", s[ i ] );
         }
    
    }
    
    void swap( char *a, char *b )
    {
         char hold = *a;
         
         *a = *b;
         *b = hold;
    }  
    
    int posizPrimoCarattere( stringa s, int r, int ppc )
    {
        int register i, j;
        int hold;
        stringa sSupport;
        
        strncpy( sSupport, s, 2 );
        
        printf("\n\nIl primo carattere della stringa e' %c", sSupport[ 1 ]);
          
        printf("\n\nOrdino la stringa di caratteri...\n");
        for( i = 1; i < r; i++ )
        {
             for( j = 0; j < r; j++ )
             {
                  if( s[ j ] > s[ j + 1 ] )
                  {
                      swap( &s[ j ], &s[ j + 1 ] );
                  }
             }
        }
        
        for( i = 0; i <= r; i++ )
        { 
              printf("%c ", s[ i ] );
        }
        
        for( i = 0; i <= r; i++ )
        {
             if( s[ i ] == sSupport[ 1 ] )
             {
                 ppc = i-1;
                 printf("\n\nLa posizione ordinata del primo carattere e' in posizione %d", ppc );
                 break;
             }
        }
        return ppc;
    }
    In realtà anche se la inizializzo non mi fa passare il valore del primo carattere dell'array alla variabile.

    cioè se
    s[ 0 ] = a; // valore preso dalla funzione leggiStringa( stringa s, int r );

    allora

    char save = s[ 0 ]; // dovrebbe salere anch'essa: a.
    invece non mi prende il valore.

    Comunque sono andato avanti ugualmente con il metodo che ho scritto sopra.
    -----------------------------------------------------------------------------
    Adesso il mio problema è un altro: ho un certo size di un array e devo creare delle posizioni casuali con: srand( time( NULL ) ); e rand() % 1 + size;.

    cioè se: il size dell'array è 6... allora devo creare un array con le posizioni da 0 ...5 in modo casuale ad esempio: 2, 5, 1, 3, 0, 4.

    ovviamente se un valore già è stato estratto non lo devo riproporre perchè quella posizione già è stata presa cioè non posso avere: 2, 2, 1, 3 , 0, 0.

    però mi escono valori strani...il codice che ho usato è questo:

    codice:
    void creaArrayIndice( array a, int rP )
    {
          srand( time( NULL ) );
         
         int register i, j;
         
         for( i = 0; i < rP; i++ )
         {
              for( j = 0; j < rP; j++ )
              {
                   if( i != j )
                   {
                       while( a[ i ] == a[ j ] )
                       {
                              a[ i ] = rand() % 1 + rP;
                       }
                   }
              }
         }
         printf("\n\nStampo l'array con le posizioni...\n");
         for( i = 0; i < rP; i++ )
         {
              printf("%d = %d\n", i, a[ i ] );
         }
    }
    dove rP è il mio size.
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Per il problema originale non hai indicato il codice che chiama la posizPrimoCarattere (il fatto che tu abbia rimediato con la strncpy non ha molta importanza perché non spiega il problema).

    Per l'altro, è meglio affrontare un problema alla volta, un problema per thread come da regolamento.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    OK apro un altro 3d grazie per aver risposto.
    Gli uomini imparano ad essere ben pensanti prima ancora di imparare a pensare (Albert Ellis)

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.