matematykaszkolna.pl
c++ builder 6 Jack: Hej, potrzebuje znalezc w jednym stringu innego. Znalazlem w Internecie, że sluzy do tego funkcja LastDelimiter. W wypadku poszukiwania chara działa dobrze − znajduje ostatnie wystąpienie danego znaku. Ale gdy ma znalezc stringa, to go nie szuka. Tylko szuka ostatniego wystapienia chara z ktorych sklada sie poszukiwany string. np: String tresc = "ooolo"; String tmp = "ala"; pozycja=tresc.LastDelimiter(tmp); pozycja zwroci 4, bo "l" jest na czwartym miejscu, a nie 0, choc "ala" nie znajduje sie w "ooolo" Znacie inna funkcje ktorej moge uzyc? Albo co mam zrobic? Ostatecznie, znacie dobry interfejs graficzny do napisania tego w Javie?
4 lut 12:04
Benny: Chodzi Ci o to, że jak masz dwa słowa, sprawdzić czy jedno słowo jest podsłowem drugiego?
4 lut 12:09
Jack: tak
4 lut 12:10
Benny: Pisałem sobie ostatnio taką funkcję. Spróbuj, nie jest trudne emotka
4 lut 12:14
Jack: Na pewno istnieje inny sposob niz pisanie specjalnej funkcji do takich rzeczy emotka
4 lut 12:16
jc: Benny, jeśli chcemy to robić możliwie szybko, to już nie jest takie proste. Przykład. aaacabcbbcba Szukasz abc, patrzysz na koniec tekstu. Widzisz a, możesz więc przesunąć się o 3. aaacabcbb Widzisz b. Możesz przesunąć się o 2. aaacabc A teraz już masz. Coś koło tego, ale można to lepiej dopracować.
4 lut 12:30
Mariusz: string find
4 lut 12:31
Jack: @jc oba stringi co chwila beda inne, wiec i tak musialbym porownywac char do chara @Mariusz w builderze nie ma funkcji find
4 lut 12:43
Metis: Przejdź na char i pusc petle po wszystkich znakach tekstu, jesli napotka twój pierwszy znak wtedy niech sprawdzi kolejny itd.
4 lut 13:07
Jack: ech @Metis Wlasnie zaczynam to pisac Choc nie ukrywam że pomysl byl taki by znalezc funkcje ktora zrobi to za mnie emotka
4 lut 13:10
Benny: @Metis, to nie wszystko. Masz słowo ana. Drugie słowo chebakana. Znajdzie literę 'a', ale kolejna nie będzie pasowała. Jednak w tym słowie znajduje się ana.
4 lut 13:18
Mariusz: W szukanym łańcuchu weź sobie podłańcuch długości równej długości drugiego danego łańcucha i porównuj podłańcuch pierwszego łańcucha z tym drugim podłańcuchem
4 lut 13:20
Mariusz: W każdej iteracji pętli zmieniasz początkowy znak pdłańcucha kopiowanego z pierwszego łańcucha
4 lut 13:23
Dziadek Mróz: std::string tresc = "ooolo"; std::string tmp = "ala"; pozycja = tresc.find(tmp); if (pozycja != std::string::npos) { std::cout << "Znaleziono wystapienie " << tmp << " w " << tresc << " na pozycji " << pozycja; }
4 lut 13:24
Mariusz: Tak ale czy jest to dostępne w builderze bo z tego on korzysta
4 lut 13:26
Mariusz: <cstring> strstr()
4 lut 13:32
Mariusz: Dziadek zajrzałbyś do tematu https://matematykaszkolna.pl/forum/317193.html Znalazłem jakiś algorytm ale nie wiem jak go zapisać w języku programowania Cormen w swoich książkach miał łatwiejsze do zapisania algorytmy jednak ograniczył się do sortowania tablic
4 lut 13:36
Dziadek Mróz: String tresc = "ooolo"; String tmp = "ala"; pozycja = tresc.Pos(tmp); if (pozycja != 0) { //nie wiem czego w BCB sie uzywa do pisania na ekran std::cout << "Znaleziono wystapienie " << tmp << " w " << tresc << " na pozycji " << pozycja; }
4 lut 13:39
Mariusz: Możliwe że BCB ma tylko c łańcuchy czyli tablice znaków skoro find mu nie działa
4 lut 13:41
Jack: ok, ku potomnym: napisalem te funkcje int findfirst(AnsiString atego,AnsiString awtym) { //blok konieczny by zmienic stringi na lancuchy charow int a = atego.Length(); int b = awtym.Length(); char *tego = new char[a]; char *wtym = new char[b]; sprintf(tego, "%s", atego.cstr()); sprintf(wtym, "%s", awtym.cstr()); int dlugosc=0; int index =0; for (int i=0; i<b; i++) { if(wtym[i]==tego[0]) { dlugosc = 1; int ii=++i; for( int j=1; (j<a && ii<b) ; j++) { if(wtym[ii]!=tego[j]) break; dlugosc++; ii++; } } if (dlugosc == a) { index =i; break; } } delete []tego; delete []wtym; return index; }
4 lut 13:52
Jack: A tak w ogóle to pozdrawiam. Jestem starszą siostrą "Jacka" i (oczywiście za jego zgodą) użyłam tego konta do zadania pytania emotka @Benny @Metis Dzięki. Zmotywowaliście mnie by samemu to napisaćemotka @Mariusz @Dziadek Mróz C++ Builder 6 rządzi się swoimi prawami. nawet petlę for ma inną, bo w czystym cpp mogłabym ją zapisać tak: for( int ii=i, int j=1; (j<a && ii<b) ; j++, i++)
4 lut 13:59
Jack: * for( int ii=++i, int j=1; (j<a && ii<b) ; j++, ii++)
4 lut 14:01
Metis:
4 lut 14:01
Mariusz: Sprawdzałeś(aś) czy działa ta funkcja ? Ja mam Borland C++ 3.1 , Dev C++ , Code::Blocks W Builderze się nie bawię Code::Blocks jest dość kiepsko napisany , w Dev C++ czasami debugger źle działa Jest też opcja aby pisać kod w notatniku a kompilować z linii poleceń
4 lut 14:11