[ IDE @ 01.08.2005. 18:10 ] @
napravio sam jedan kod koji bi trebao nakon sto unesemo string "a" i string "b" da pogleda ima li stringa "b" u stringu "a"...
znaci ne interesuje me ni koliko puta ima string "b" u "a", ni na kojoj lokaciji, nego prosto : IMA LI GA samo...
npr. rijec "roda" postoji u "priroda i drustvo"....

naravno, cim sam vam se javio-jasno vam je da ne radi...
nakon sto unesem string "a" i string "b", kad kliknem "enter" kursor predje dolje i program ama bas nista ne redi...

volio bih ako biste mi mogli pomoci da vidim sta ovdje ne valja...
da bi se lakse snasli-opisacu vam sta program radi, korak po korak...
u main() se unese "a" i "b", i zovemo f-ju
"provjeri" koja provjerava prvo da li je "a" prazan string, pa onda da li je neko a jednako sa pocetnim slovom od "b" (b[0])
ako jeste, ona zove f-ju "provjeri1" koja provjerava da li su sva slova u "a" pocev od one lokacije koja je nadjena da se podudara sa pocetnim slovom od "b" jednaka sa ostalim u "b".Tu sam koristio indikator IND, koji ce biti nula ako se neko slovo od "a" u duzini strlen(b) ne podudara sa korespodentnim slovom u "b", i tada iskace while petlja i vraca se nula...
normalno ako f-ja "provjeri" i "provjeri1" ne nadju ni jedno slovo jednako, samo nastavljaju provjeravati slova do kraja "a"...

evo koda:

Code:
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
int provjeri1(char *a,char *b,int i)     /*vraca IND=1 ako se ispostavi da je svako    slovo iz "a"  za duzinu od "b" jednako sa odgovarajucim slovima iz "b" */
{
    int j=1,k=0,IND=1;
    while (j<=strlen(b) && IND==1)
    {
        if (a[i]==b[k])
        {
            i=i+1;
            k=k+1;
        }
        else if (a[i]!=b[k])
        {
            IND=0;
        }
        j=j+1;
    }
    return IND;
}
int provjeri(char *a,char *b)    //vraca 1 ako ima podstring "b" u "a", a 0 ako nema
{
int i=0;
if (a[0]=='\0')
return 0;
while (a[i]!='\0')
{
    if(a[i]==b[0])            //gledamo dali je a[i] jednako sa b[0] duzinu "b"
    {
     if(provjeri1(a,b,i)==1)       /* pogledaj ostala slova iz "a" za duznu "b", "i" je lokacija pocetnog slova*/
     {
         return 1;
         break;
     }
     i=i+1;
    }
}
return 0;
}

void main()
{
         char a[30],b[30];       
         printf("unesite glavni string: ");
    gets(a);
         printf("unesite trazeni string: ");
    gets(b);
    if (provjeri(a,b)==1)
    {
        printf("glavni string sadrzi trazeni string");
    }
    else
    {
        printf("glavni string ne sadrzi trazeni string!!");
    }
}


unaprijed hvala...
a da... usput...ima li ovakva ista ( potpuno isti zadatak da ima) f-ja vec u c++-u, tj. Borlandu?? zna li ko??
[ Burgos @ 01.08.2005. 18:17 ] @
C++ verzija:

Code:

unsigned FindInStr(const std::string& src, const std::string& trm)
{
    unsigned numOccurrences = 0;
    size_t loc = 0;
    while (loc < src.size() &&
          (loc = src.find(trm, loc)) != std::string::npos)
    {
        ++numOccurrences;
        ++loc;
    }
    return numOccurrences;
}
[ IDE @ 01.08.2005. 18:22 ] @
jos koji odgovor....???
jos neko????

pomoc oko moga koda????
[ NastyBoy @ 01.08.2005. 18:57 ] @
Ako vec radish sa c-stringovima, onda probaj char * strstr(const char *s1, const char *s2); iz string.h koja bash to radi.
[ Goran Arandjelovic @ 01.08.2005. 19:43 ] @
prethodni odgovor je dobar...mada nije lose ni strtok :)

[Ovu poruku je menjao Goran Arandjelovic dana 01.08.2005. u 20:43 GMT+1]
[ X Files @ 01.08.2005. 19:46 ] @
--- NAČIN 1 ---

// Borland C++ Builder 6
// ...
#include <StrUtils.Hpp>
// ...

bool __fastcall AnsiContainsText(const AnsiString AText, const AnsiString ASubText);

Citat:

Description

AnsiContainsText returns true if the string specified by ASubText appears as a substring of the string specified by AText. Comparison is performed case-insensitively and based on the current Windows locale.


--- NAČIN 2 ---
Citat:

Returns the index at which a specified substring begins.

int __fastcall Pos(const AnsiString& subStr) const;

Description

Pos returns the index in the AnsiString at which the substring subStr begins, where 1 is the index of the first character, 2 is the index of the second character, and so on. If the substring is not contained in the AnsiString, Pos returns 0.


Dakle, ako funkcija vrati 0, onda nema pojavljivanja...

[ X Files @ 01.08.2005. 20:15 ] @
 Sorry, ovo sada je proba...

... za NEWS server
--
Best regards,
Vladimir Stefanovic [quote]


[Ovu poruku je menjao X Files dana 01.08.2005. u 21:17 GMT+1]
[ rumpl @ 01.08.2005. 23:44 ] @
Code:

#include <stdio.h>
#include<string.h>
#include<stdlib.h>

int provjeri1(char *a, char *b, int i)
{
  int j;
  int k;
  int IND=1;
  
  j = 1;
  k = 0;
  IND = 1;
  
  while (j <= strlen(b) && IND == 1)
    {
      if (a[i]==b[k])
        {
      i++;
      k++;
        }
      else if (a[i] != b[k])
        {
      IND = 0;
        }
      
      j++;
    }
  return(IND);
}

int provjeri(char *a, char *b)
{
  int i;
  
  i = 0;

  if (a[0] == '\0')
    return(0);
  
  while (a[i] != '\0')
    {
      if(a[i] == b[0])
    {
      if(provjeri1(a, b, i) == 1) 
        {
          return(1);
          //break;  Ova komadna se nikada ne izvrsava jer je posle jednog return-a
        }
           //i = i + 1; greska
    }
      i++; 
      // ovde je bila greska, i ti je bio u if-u, 
      // i naravno, ako a[0] != b[0], i nikada nije
      // bio uvecevan, i eto lepog primera while
      // petlje koja se nikada ne zavrsava :) rumpl
    }
  return 0;
}

int  main(int argc, char **argv)
{
  char a[30],b[30];       

  printf("unesite glavni string: ");
  gets(a);
  
  printf("unesite trazeni string: ");
  gets(b);
  
  if (provjeri(a,b)==1)
    {
      printf("glavni string sadrzi trazeni string");
    }
  else
    {
      printf("glavni string ne sadrzi trazeni string!!");
    }

  return(0);
}


Stvarno se treba cuvati ovakvih gluposti...



[Ovu poruku je menjao rumpl dana 02.08.2005. u 00:53 GMT+1]
[ IDE @ 11.08.2005. 15:51 ] @
"rumpl", mozda to jesu gluposti, ali molim te odgovori mi STA je tu glupost (ne kazem da nije ( a ni da jeste), nego hocu i ja to da vidim sta vi vidite...)

uostalom, kako bi ti (vi) napravio f-ju koja radi ovo sto mi treba???ali ne koristeci nista gotovo,znaci kao sto sam ja pokusao uraditi...

hvala vam svima na odgovorima....!!

UUPPPPSSS!!! izvinjavam se, "rumpl", zaista nisam vidio tvoje komentare u sklopu moga koda....

to mi je i trebalo....

[Ovu poruku je menjao fucking voodoo dana 11.08.2005. u 16:54 GMT+1]
[ rumpl @ 11.08.2005. 16:10 ] @
pa dobro jel radi sad program ono sto hoces?
[ IDE @ 11.08.2005. 16:14 ] @
pa, evo tek sam procitao odgovore,nesto je ES zezao ovih dana,pa nisam ni stigao nista provjeriti...
nisam ni pogledao jesi li mjenjao kod...samo sam vidio da si iskomentarisao ponesto...

javicu ovdje radi li....
[ rumpl @ 11.08.2005. 16:23 ] @
ako uporedis moj i tvoj kod, jedino sto se promenilo je to sto i++ vise nije u if-u.
Problem koji se pojavljivao jeste da, ako prva slova nisu jednaka,while petlja bi postala neprekidna...
Kod mene je moj kod radio...
[ Shatterhand @ 11.08.2005. 21:01 ] @
Citat:
prethodni odgovor je dobar...mada nije lose ni strtok :)

Ne vidim kako bi mu pomogla f-ja koja razbija string u tokene.
Kao gotovo resenje bi to bila strstr(), ali njemu nije trebalo gotovo ;)

[Ovu poruku je menjao Shatterhand dana 11.08.2005. u 22:02 GMT+1]
[ IDE @ 11.08.2005. 21:01 ] @
da, da...u pravu si!!!

pa kako mi je to promaklo??? jedno obicno i++...

kod je sada u redu!! radi sada!!

hvala puno!!!!
[ rumpl @ 11.08.2005. 21:12 ] @
nema na cemu... :)

[ tarzan063 @ 16.08.2005. 22:39 ] @
Ljudi,
kako bih mogao konvertirati u Borland C++ 6.0 iz AnsiString-a u int i char????
Ili druga solucija. Kako da namestim da sadrzaj text box-a smestim u promenjivu tipa int ili char. Varijanta x=(int)Edit1->Text; ne prolazi.
[ X Files @ 16.08.2005. 22:51 ] @
Ovo pitanje nema veze sa naslovom. Uvek treba da postavis NOVO pitanje...

Citat:

Ljudi,
kako bih mogao konvertirati u Borland C++ 6.0 iz AnsiString-a u int i char????
Ili druga solucija. Kako da namestim da sadrzaj text box-a smestim u promenjivu tipa int ili char. Varijanta x=(int)Edit1->Text; ne prolazi.


Kada ti treba AnsiString da bude char*, onda mozes da upotrebis funkciju c_str():

// na primer:
AnsiString Text = "Bilo šta";
Funkcija( Text.c_str() ); // Funkcija ( char* )

kada vrsis konverziju u int moze:
x = StrToInt( Edit1->Text );

Takodje pogledaj StrToIntDef(), TryStrToInt(), TryStrToInt64()




[ tarzan063 @ 17.08.2005. 00:32 ] @
I jesam. U Svakom slucaju hvala.