Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327

    [C]Scova il carattere nel vettore.... non ci riesco!

    Provo a realizzare una funzione, i cui argomenti sono (vet1[] e vet2[]). Tale funzione dovrebbe essere in grado di restituire la prima posizione in cui un elemento di vett2 compare in vett1.
    Ho provato a buttare giu' due idee ma incontro diverse difficoltà; la mia idea sbagliata è:
    Codice PHP:
    while (vett1[i]!='\0')

    {

          for(
    j=0vett1[i]!=vett2[j] || vett[j]!='\0')

          ;

          if (
    vett1[i]==vett2[j])

             return 
    i;

          else if (
    vett2[j]=='\0')

          
    i++;


    Gli errori che mi saltano subito all'occhio sono: ammesso che funzionasse, dal momento che il tutto è racchiuso dentro un while, la i di ritorno indicherebbe la posizione del'ultima celle contenente quel determinato carattere e non la prima.
    Ho pensato allora di togliere ill while e far dipendere tutto dal for pero' non so come poter rientrare nel for, dal momento che è venuto a mancare il while.

    So che ci sono parecchi errori, ma vorrei pian piano capirli e risolverli..

  2. #2
    Come minimo devi fare un doppio ciclo annidato: uno suş primo vettore, l'altro sul secondo.
    Se puoi usare la strchr allora puoi evitare il secondo ciclo perche' in realta' glielo fai fare alla strchr.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Originariamente inviato da MacApp
    Come minimo devi fare un doppio ciclo annidato: uno suş primo vettore, l'altro sul secondo.
    Se puoi usare la strchr allora puoi evitare il secondo ciclo perche' in realta' glielo fai fare alla strchr.
    Purtroppo non ho fatto la strchr.
    Per il resto potresti farmi vedere un esempio.. o qualcosa che mi dia un idea perchè non ho capito bene..
    E' da pochissimo che tento di programmare..

    Grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da playbasfa
    Per il resto potresti farmi vedere un esempio.. o qualcosa che mi dia un idea perchè non ho capito bene..
    Innanzitutto alla funzione devono essere anche passate le due lunghezze degli array! (altrimenti come sai dove finisce l'array?) Poi, come è già stato detto, devi fare un doppio ciclo for annidato. Dovrai usare 2 variabili che fanno da indice, una per il ciclo for che scansiona vet1 e l'altra per il ciclo for (innestato) che scansiona vet2.
    Si fa tutto in poche righe di codice.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Originariamente inviato da andbin
    Innanzitutto alla funzione devono essere anche passate le due lunghezze degli array! (altrimenti come sai dove finisce l'array?) Poi, come è già stato detto, devi fare un doppio ciclo for annidato. Dovrai usare 2 variabili che fanno da indice, una per il ciclo for che scansiona vet1 e l'altra per il ciclo for (innestato) che scansiona vet2.
    Si fa tutto in poche righe di codice.
    Per le lunghezze non c'è problmea.. c'ho già pensato..
    P.s. il tutto non deve essere controllato da un while?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da playbasfa
    P.s. il tutto non deve essere controllato da un while?
    I cicli for sono più indicati e appropriati quando, come in questo caso, ci sono degli indici.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Ho provato a creare un programma in grado di segnalare, tramite la funzione any, l'indice del vettore in cui si incontra il primo carattere uguale a quello presente nel secondo vettore;
    in questo caso i vettori sono principale (quello in cui cercare i caratteri uguali) e cerca (quello contenente i caratteri da cercare)
    Il programma non funzione in quanto mi stampa sempre 4199333 sia che io inserisca un carattere contenuto, sia che io inserisca un carattere che non lo sia.

    Codice PHP:
    #include <stdio.h>

    int getline(char[]);

    int any(char[],char[]);



    main()

    {

    char cerca[]="politeama";

    char vettore[1000];



    while ((
    getline(vettore))>0){

                                 if(
    any(vettore,cerca)>-1)

                                                          
    printf ("%d"any);

                                 else if(
    any(vettore,cerca)==-1)

                                                          
    printf("\nnon c'e'\n");

                                 }



    }







    int getline (char vetto[]){

    int c,i;

                               for(
    i=0; (c=getchar())!= EOF && c!= '\n';i++)

                                        
    vetto[i]=c;

                               if (
    c== '\n')

                                             
    vetto[i++]=c;

                               
    vetto[i]='\0';

                               return 
    i;

                               }











    int any(char principale[] , char pattern[]){

    int i,j;

                                                for( 
    i=j=0principale[i]!= '\0' || principale [i]!= pattern[j]; j++)

                                                     {

                                                            if(
    pattern[j]== '\0')

                                                                     {
    i++; j=0;}

                                                            

                                                            else if (
    principale[i]!= pattern[j])

                                                                  ;

                                                     }

                                                     if (
    principale[i]== pattern[j])

                                                                     return 
    i;

                                                     else if (
    principale[i]== '\0')

                                                                     return -
    1;

                                               } 

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da playbasfa
    Il programma non funzione in quanto mi viene sempre restituito -1, qualunque cosa io inserisca..
    Non ho ancora letto tutto il codice per bene. Diverse cose ho notato subito: any è una funzione, non una variabile. Quindi fare printf ("%d", any); non ne vedo il senso.
    Poi non vedo nella funzione any() il doppio ciclo for innestato, necessario come già ampiamente spiegato sopra (da me).
    Infine, non so se è un errore di copia/incolla, hai messo '�'. Chè è?? Se vuoi indicare il carattere nullo si mette '\0'.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Originariamente inviato da andbin
    Non ho ancora letto tutto il codice per bene. Diverse cose ho notato subito: any è una funzione, non una variabile. Quindi fare printf ("%d", any); non ne vedo il senso.
    Poi non vedo nella funzione any() il doppio ciclo for innestato, necessario come già ampiamente spiegato sopra (da me).
    Infine, non so se è un errore di copia/incolla, hai messo '�'. Chè è?? Se vuoi indicare il carattere nullo si mette '\0'.
    Per quanto riguarda printf("%d",any) intendo stampare il valore restituito dalla funzione any.. spesso lo uso e non mi ha mai creato problemi;
    Per quanto riguarda '?' nel sorgente è giusto '\0', ma nell'incollare il sorgente qui, non so perchè viene trasformato.
    Per quanto riguarda il doppio ciclo for... questo è quanto di meglio sono riuscito a fare, so che non è quello che mi hai suggerito tu ma è l'unica cosa cui sono saputo arrivare..Che prima di compilare, a mio parere avrebbe potuto funzionare..

  10. #10
    Originariamente inviato da playbasfa
    Per quanto riguarda printf("%d",any) intendo stampare il valore restituito dalla funzione any.. spesso lo uso e non mi ha mai creato problemi;
    Sicuro ?
    Innanzitutto dovresti assegnare ad una variabile il valore restituito dalla finzione any,
    evitando così di richiamarla più volte, per svolgere sempre la stessa operazione...
    Comunque in quel modo la printf visualizza solamente l'indirizzo in memoria della funzione...
    Originariamente inviato da playbasfa
    Per quanto riguarda '?' nel sorgente è giusto '\0', ma nell'incollare il sorgente qui, non so perchè viene trasformato.
    Per quanto riguarda il doppio ciclo for... questo è quanto di meglio sono riuscito a fare, so che non è quello che mi hai suggerito tu ma è l'unica cosa cui sono saputo arrivare..Che prima di compilare, a mio parere avrebbe potuto funzionare..
    Come ti ha già detto andbin, usare due cicli annidati è una buona soluzione.
    Nel tuo codice di errori banali ce ne sono parecchi, forse stai facendo il 'passo più lungo della gamba'
    a giudicare dall'indentazione del codice che, quando è corretta, da sola ti risparmia molti errori.
    Dovresti colmare, al più presto, le tue lacune sulle nozioni di base del linguaggio.
    Altrimenti troverai parecchi problemi e ti ritroverai bloccato anche nella stesura di programmi
    semplici come questo.
    Ciao.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

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.