| Prethodna tema :: Sljedeća tema   | 
	
	
	
		| Autor/ica | 
		Poruka | 
	
	
		bimar Forumaš(ica)
  
  
  Pridružen/a: 16. 11. 2008. (14:45:25) Postovi: (61)16 
Lokacija: arkadija 
		 | 
		
			
				 Postano: 16:13 ned, 3. 5. 2009    Naslov: Trazenje podstringa | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         trebam napisati funkciju koja prima 2 stringa (string i podstring) te vraća mjesto u stringu (većem) gdje počinje podstring
 
 primjer: učitamo s1=danas je sunčan dan  
                          s2=sunčan
 
 funkcija treba vratiti 9....jer je sunčan počinje na 9. mjestu u s1......
 
 
 [code:1]
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 int stringulja( char s1[], char s2[]){
 int i,j, istina=0,rezultat;
 
 	for (i=0; i<=strlen(s1); i++)
 		if (s1[i]==s2[0]) 
 			{istina=1; rezultat=i;
 				{ for (j=0; j<=strlen(s2);j++)
 					if (s1[i+j]!=s2[j]) istina=0;}}
 return rezultat;}
 
 
 
 int main(void)
 	{ char s1[10], s2[10];
  		printf("upisite string");
  		scanf("%[^\n]", s1);
  		printf("upisite podstring");
  		scanf("%[^\n]", s2);
  			printf(" mjesto u stringu s1 gdje se pojavljuje(pocinje) string s2 je %d", stringulja(s1,s2));
  			
  	scanf("%%");
  	
 return 0;
 }
 
 			
 [/code:1]
 
 evo moga rješenja, koje se ruši odmah... bio bih jako zahvalan za nekakvu pomoć.... 
 fala :D 
					
					trebam napisati funkciju koja prima 2 stringa (string i podstring) te vraća mjesto u stringu (većem) gdje počinje podstring
 
 
primjer: učitamo s1=danas je sunčan dan  
 
                         s2=sunčan
 
 
funkcija treba vratiti 9....jer je sunčan počinje na 9. mjestu u s1......
 
 
 
 	  | Kod: | 	 		  
 
#include <stdio.h>
 
#include <stdlib.h>
 
#include <string.h>
 
int stringulja( char s1[], char s2[]){
 
int i,j, istina=0,rezultat;
 
 
   for (i=0; i<=strlen(s1); i++)
 
      if (s1[i]==s2[0]) 
 
         {istina=1; rezultat=i;
 
            { for (j=0; j<=strlen(s2);j++)
 
               if (s1[i+j]!=s2[j]) istina=0;}}
 
return rezultat;}
 
 
 
 
int main(void)
 
   { char s1[10], s2[10];
 
       printf("upisite string");
 
       scanf("%[^\n]", s1);
 
       printf("upisite podstring");
 
       scanf("%[^\n]", s2);
 
          printf(" mjesto u stringu s1 gdje se pojavljuje(pocinje) string s2 je %d", stringulja(s1,s2));
 
          
 
    scanf("%%");
 
    
 
return 0;
 
}
 
 
         
 
 | 	  
 
 
evo moga rješenja, koje se ruši odmah... bio bih jako zahvalan za nekakvu pomoć.... 
 
fala  
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 16:28 ned, 3. 5. 2009    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Kad vec koristis [tt]string.h[/tt], pomozi si s funkcijama
 [code:1]#include <string.h>
 char *strstr(const char *haystack, const char *needle);
 char *strcasestr(const char *haystack, const char *needle);[/code:1]
 (zadnja ne radi u M$ovim compilerima; oni imaju neku nestandardu, ne znam napamet koju, no mislim da pise u mojoj skripti)
 
 Dakle,
 [code:1]p = strstr(s, "nesto");
 printf("Pozicija je %d.\n", p - s);[/code:1]
 
 8)
 
 Inace, obje petlja funkcije [tt]stringulja()[/tt] idu predaleko, te ne koristis nigdje vrijednost varijable [tt]istina[/tt] (sto bi trebalo iskoristiti). ;)
 
 Ako treba vise infoa, samo pitaj. 8) 
					
					Kad vec koristis string.h, pomozi si s funkcijama
 
 	  | Kod: | 	 		  #include <string.h>
 
char *strstr(const char *haystack, const char *needle);
 
char *strcasestr(const char *haystack, const char *needle); | 	  
 
(zadnja ne radi u M$ovim compilerima; oni imaju neku nestandardu, ne znam napamet koju, no mislim da pise u mojoj skripti)
 
 
Dakle,
 
 	  | Kod: | 	 		  p = strstr(s, "nesto");
 
printf("Pozicija je %d.\n", p - s); | 	  
 
 
 
 
 
Inace, obje petlja funkcije stringulja() idu predaleko, te ne koristis nigdje vrijednost varijable istina (sto bi trebalo iskoristiti).  
 
 
Ako treba vise infoa, samo pitaj.  
					_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
 
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.   
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		bimar Forumaš(ica)
  
  
  Pridružen/a: 16. 11. 2008. (14:45:25) Postovi: (61)16 
Lokacija: arkadija 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		bimar Forumaš(ica)
  
  
  Pridružen/a: 16. 11. 2008. (14:45:25) Postovi: (61)16 
Lokacija: arkadija 
		 | 
		
			
				 Postano: 17:31 ned, 3. 5. 2009    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         [code:1]
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 int stringulja( char s1[], char s2[]){
 int i,j, istina=0,rezultat;
 
 	for (i=0; i<=strlen(s1)-1; i++)
 		if (s1[i]==s2[0]) 
 			{istina=1; rezultat=i;
 				{ for (j=0; j<=strlen(s2)-1;j++)
 					if (s1[i+j]!=s2[j]) istina=0;}}
 if (istina) return rezultat;
 return -1;}
 
 
 
 int main(void)
 	{ char s1[10], s2[10];
  		printf("upisite string i podstring");
  		scanf("%[^\n] ", s1);
  		scanf("%[^\n]", s2);
 	    if (stringulja(s1,s2)==-1) printf("podstring se ne pojavljuje u stringu"); else 
              printf(" \n mjesto u stringu s1 gdje se pojavljuje(pocinje) string s2 je %d", stringulja(s1,s2));
  			
  	scanf("%%");
  	
 return 0;
 }
 
 	
 
 [/code:1]
 
 
 hvala :D 
					
					 	  | Kod: | 	 		  
 
#include <stdio.h>
 
#include <stdlib.h>
 
#include <string.h>
 
int stringulja( char s1[], char s2[]){
 
int i,j, istina=0,rezultat;
 
 
   for (i=0; i<=strlen(s1)-1; i++)
 
      if (s1[i]==s2[0]) 
 
         {istina=1; rezultat=i;
 
            { for (j=0; j<=strlen(s2)-1;j++)
 
               if (s1[i+j]!=s2[j]) istina=0;}}
 
if (istina) return rezultat;
 
return -1;}
 
 
 
 
int main(void)
 
   { char s1[10], s2[10];
 
       printf("upisite string i podstring");
 
       scanf("%[^\n] ", s1);
 
       scanf("%[^\n]", s2);
 
       if (stringulja(s1,s2)==-1) printf("podstring se ne pojavljuje u stringu"); else 
 
             printf(" \n mjesto u stringu s1 gdje se pojavljuje(pocinje) string s2 je %d", stringulja(s1,s2));
 
          
 
    scanf("%%");
 
    
 
return 0;
 
}
 
 
   
 
 
 | 	  
 
 
 
hvala  
					
 
  
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		vsego Site Admin
  
  
  Pridružen/a: 06. 10. 2002. (22:07:09) Postovi: (3562)16 
Spol:   
Lokacija: /sbin/init 
		 | 
		
			
				 Postano: 17:52 ned, 3. 5. 2009    Naslov:  | 
				            | 
			 
			
				
  | 
			 
			
				| 
                                         Jednostavna situacija:
 [tt]s1 = "aba"; s2 = "abcdefghi";[/tt]
 U vanjskoj petlji [tt]i[/tt] ide od 0 do 2; kad na to dodas [tt]j[/tt] koji ide od 0 do 8, dobijes u [tt]s1[i+j][/tt] da gledas element [tt]s1[10][/tt] (u zadnjem koraku), sto ne pripada nizu (stringu) [tt]s1[/tt]!. :ccc:
 
 Kad se to ispravi, ako uneses stringove "[tt]xabyabz[/tt]" i "[tt]ab[/tt]", dobit ces poruku
 [tt]mjesto u stringu s1 gdje se pojavljuje(pocinje) string s2 je 4[/tt],
 sto nije prvo mjesto podstringa (kako bih ocekivao od ovakve funkcije). :?
 
 Jos gore, ako uneses stringove "[tt]xabyaba[/tt]" i "[tt]ab[/tt]", dobit ces poruku
 [tt]podstring se ne pojavljuje u stringu[/tt], :shock:
 jer ces abog ovog zadnjeg "[tt]a[/tt]" resetirati flag [tt]istina[/tt] iako si vec nasao podstring. :ccc:
 
 Uputa: onaj [tt]if()[/tt] s [tt]return[/tt]-om mora ici u vanjsku petlju, a ne izvan nje. 8) Uvjet druge petlje se lako sredi da ne ide predaleko. ;) Vanjska petlja je sada ok (prije nije imala onaj "[tt]-1[/tt]"). 8)
 
 Ne dajem ti konacno rjesenje, jer to mozes negdje i sam naci ([b]mazda[/b] cak u nekom nastavnom materijalu i/ili starom ispitu/kolokviju na Prog 2); preferiram hintove, da covjek sam skuzi. ;) 
					
					Jednostavna situacija:
 
s1 = "aba"; s2 = "abcdefghi";
 
U vanjskoj petlji i ide od 0 do 2; kad na to dodas j koji ide od 0 do 8, dobijes u s1[i+j] da gledas element s1[10] (u zadnjem koraku), sto ne pripada nizu (stringu) s1!.  
 
 
Kad se to ispravi, ako uneses stringove "xabyabz" i "ab", dobit ces poruku
 
mjesto u stringu s1 gdje se pojavljuje(pocinje) string s2 je 4,
 
sto nije prvo mjesto podstringa (kako bih ocekivao od ovakve funkcije).  
 
 
Jos gore, ako uneses stringove "xabyaba" i "ab", dobit ces poruku
 
podstring se ne pojavljuje u stringu,  
 
jer ces abog ovog zadnjeg "a" resetirati flag istina iako si vec nasao podstring.  
 
 
Uputa: onaj if() s return-om mora ici u vanjsku petlju, a ne izvan nje.   Uvjet druge petlje se lako sredi da ne ide predaleko.   Vanjska petlja je sada ok (prije nije imala onaj "-1").  
 
 
Ne dajem ti konacno rjesenje, jer to mozes negdje i sam naci (mazda cak u nekom nastavnom materijalu i/ili starom ispitu/kolokviju na Prog 2); preferiram hintove, da covjek sam skuzi.  
					_________________ U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
 
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.   
					
					
					
				 | 
			 
		  | 
	
	
		| [Vrh] | 
		 | 
	
	
		bimar Forumaš(ica)
  
  
  Pridružen/a: 16. 11. 2008. (14:45:25) Postovi: (61)16 
Lokacija: arkadija 
		 | 
		 | 
	
	
		| [Vrh] | 
		 | 
	
	
		 |