Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - trovare la posizione della prima occorrenza di una stringa in un altra.
Forum - C/C++ - trovare la posizione della prima occorrenza di una stringa in un altra.

Avatar
splittik (Normal User)
Rookie


Messaggi: 27
Iscritto: 25/04/2012

Segnala al moderatore
Postato alle 2:03
Mercoledì, 25/04/2012

Il problema è trovare la posizione della prima occorrenza della stringa t in s.
Ho gia implementato la soluzione usandi la strstr, ma per esercizio ho voluto provare a implementare una soluzione sneza farne uso.
In realtà il codice che ho postato in parte risolve il problema(per esplicitare il risultato richiesto devo solo migliorare il corpo dell if che controlla il cont) in quanto se la stringa s non contiene parti di t la mia soluzione funziona, ma in caso contrario no in quanto i viene incrementato al primo confronto positivo e poi si prosegue , ma non si rispetta piu la contiguità nei confronti.
Dunque ringrazio di cuore la buon anima che mi vorrà liberare dal pensiero in quanto è da un po che non riesco a migliorare il codice...se pongo i=0 nell' else al momento della compilazione ottengo un infelicissimo loop.


s e t sono 2 stringhe;
int i,j,cont;

Codice sorgente - presumibilmente Plain Text

  1. i=0;
  2. for(; i<strlen(t);){
  3. //printf("%c", t[i]);
  4. for(j=0; j<strlen(s);){
  5. if(t[i]==s[j]){
  6. //printf("%c", s[j]);
  7. printf("if i %d j %d \n", i,j);
  8. i++;
  9. j++;
  10. cont++;
  11. if(cont == strlen(t)){
  12. printf("cont%d\n", i);
  13. }      
  14. }
  15. else{
  16. printf("else i %d j %d \n", i,j);
  17. cont=0;
  18. j++;
  19. }
  20. }
  21. printf("\n");
  22. }
  23. }



System.out.print("road to diventare sviluppatore");
PM Quote
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Segnala al moderatore
Postato alle 11:04
Mercoledì, 25/04/2012
Ciao allora ci sono 2 soluzioni per risolvere il tuo problema, eccole:
1-soluzione:
Codice sorgente - presumibilmente C++

  1. char stra[30]="Stringa su cui fare la ricerca";
  2.         char strb[30]="ricerca";
  3.  
  4.         unsigned int j=0L;
  5.         bool findSubStr;
  6.        
  7.         printf("\nstra = \"%s\"\n", stra);
  8.         printf("strb = \"%s\"\n\n", strb);
  9.        
  10.         for(unsigned int i=0; i<strlen(stra)-1 && j<=strlen(strb)-1 ; i++)
  11.         {
  12.                 if(stra[i]==strb[j])
  13.                 {
  14.                         j++;
  15.                         findSubStr=true;
  16.                 }
  17.                 else
  18.                 {
  19.                         j=0L;
  20.                         findSubStr=false;
  21.                 }
  22.         }
  23.        
  24.         if( findSubStr )
  25.                 printf("E' contenuta\n");
  26.         else
  27.                 printf("Non e' contenuta\n");



2-soluzione:
Codice sorgente - presumibilmente C++

  1. char stra[30]="Stringa su cui fare la ricerca";
  2.         char strb[30]="ricerca";       
  3.        
  4.         printf("\nstra = \"%s\"\n", stra);
  5.         printf("strb = \"%s\"\n\n", strb);
  6.        
  7.         unsigned int sb, pc=0;
  8.         while (stra[pc])
  9.         {
  10.                 sb = 0;
  11.                 while (stra[pc] && strb[sb] && !(stra[pc]-strb[sb] )) pc++, sb++;
  12.                
  13.                 if (!strb[sb])
  14.                 {
  15.                         printf("\nTrovato dal carattere %d (base 0)\n", pc-strlen(strb));
  16.                         break;
  17.                 }
  18.                 pc++;
  19.         }


ciao ;)


Parte della disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.  [cit. Isaac Asimov]
PM Quote
Avatar
splittik (Normal User)
Rookie


Messaggi: 27
Iscritto: 25/04/2012

Segnala al moderatore
Postato alle 12:19
Mercoledì, 25/04/2012
Ciao bububs
ti ringrazio per la disponibilità :k:


System.out.print("road to diventare sviluppatore");
PM Quote
Avatar
bububs (Normal User)
Expert


Messaggi: 253
Iscritto: 11/03/2010

Segnala al moderatore
Postato alle 23:33
Mercoledì, 25/04/2012
Ciao splittik, figurati :k:


Parte della disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.  [cit. Isaac Asimov]
PM Quote