Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    100

    Spiegazione sui puntatori (C).

    Il linguaggio è il C.
    Qualcuno sa aspiegarmi cosa fa esattamante questo codice?

    char s[100],t[100];
    gets(s);
    gets(t);
    int nocc=0;
    //inizio codice che non so cosa faccia
    char * p = t; //istruzione che non ho capito
    while(p = strstr(p,s), p!= NULL)
    {
    ++nocc;
    printf("Occorrenza all'offset %d\n",p-t);
    ++p;
    }

    cioè con char *p = t; che cosa fa?
    cosa è stao definito? una variabile puntatore che punta al primo elem
    della stringa t?
    qui (p = strstr(p,s), p!= NULL) che succede?
    Spero di essermi riuscito a spiergare.
    Grazie mille per le risposte.

  2. #2
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219
    Quando hai a che fare con un array e scrivi semplicemente il suo nome senza, specificare alcun indice, tu usi il suo indirizzo ed essendo t un vettore di caratteri assegni al puntatore p l'indirizzo di t, facendo puntare p a t...

    Per la seconda domanda... La virgola è un and sarebbe come scrivere
    while((p = strstr(p,s))&& (p!= NULL))

  3. #3
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219
    La prossima volta che inserisci del codice usa CODE e /CODE (Entrambi tra parentesi quadre) rispettivamente all'inizio e alla fine del codice, altrimenti c'è troppo casino nella scrittura, oppure utilizza PHP e /PHP (Sempre tra parentesi quadre es: [nome][/nome]) che ti fa anche il codice colorato...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    100
    prova di inserimento codice

    codice:
    	char s[100],t[100];
     gets(s);
     gets(t);
     int nocc=0;
    
    	char * p = t;
    	cout <<*p;
     while(p = strstr(p,s), p!= NULL)
    	{
    		++nocc;
    		printf("Occorrenza all'offset %d\n",p-t);
    		++p;
    	}
    	printf("Trovate %d occorrenze",nocc);
        system ("PAUSE");
    	return 0

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    100
    Grazie minoz.
    quindi scrivendo char *p=t; p punta al primo elemento del vettore t. Dico Bene?
    Ma perchè in questa istruzione p = strstr(p,s), non ha usato t al posto di p? p è sempre un puntarore o in questa parentesi diventa una normale variabile di tipo carattere?

  6. #6
    Utente di HTML.it L'avatar di minoz
    Registrato dal
    Oct 2001
    Messaggi
    219
    Semplicemente perchè nel programma si voleva che t rimanesse invariato!
    Oh così va meglio!:metallica

  7. #7
    Originariamente inviato da minoz
    Semplicemente perchè nel programma si voleva che t rimanesse invariato!
    Oh così va meglio!:metallica
    Per l'esattezza l'ho fatto perchè t è un vettore e non un puntatore e vrei potuto accederlo solo tramite un indice aggiuntivo, che è secondo me scomodo, dal momento che strstr prende come argomento un puntatore, e non un vettore + un indice.

    Fight, non mischiare codice C con codice C++ tipo cout << *p;

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    100
    Grazie Andrea.
    Io ho provato a fare il programma anche senza funzioni di libreria
    in questo modo:
    codice:
    #include <iostream.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    
    int main()
    { char s[100],t[100];
      int i,j,cont,again,pos,POS[100];
     gets (s);
     fflush(stdin);
     gets (t);
    i=0; j=0; cont=0;
     while ((s[i]!='\0')&& (t[j]!='\0'))
     { 
           
           if(s[i]==t[j])
           {  again=again+1;       
                         do{
                         i++;
                         j++;
                        }while ((s[i]!='\0')&&(t[j]!='\0') && (s[i]==t[j]));
                    if (s[i]=='\0')
                    {cont=cont+1;
                     i=0;
                     POS[cont]=j-1;
                    } 
                    else
                    {j=again;
                     i=0;
                     }
           }
           else {
            j++;
           }
    
     }
      cout <<"Numero di volte contenuta  " <<cont <<endl; 
     cout <<"Ecco le posizioni" <<endl;
     for (i=0;i<=cont;i++)
     { cout<<POS[i];
     
      } 
    
    
    
          system("PAUSE");
          return 0;
    }
    Che te ne pare?
    Ma se ad esempio gli do la stringa s Ciao e la stringa t CCiao
    mi dice che è contenuta zero volte.
    p.s. gets fa parte del c o del c++?

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    100
    Non capisco sto fatto da cosa dipende.
    Dove sbaglio?

  10. #10
    Ricordami di guardarci stasera, adesso purtroppo non riesco...

    Ciao

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.