[C++] Zoekfunctie

Pagina: 1
Acties:

  • Tusk
  • Registratie: Juni 2001
  • Laatst online: 28-08 12:26

Tusk

Sticky Bomb likes you!

Topicstarter
het gaat hier om borland c++ 6.0 enterprise.

ik heb dus een listbox met daarin een aantal items (Strings)
nou wil ik dus via een zoek functie een string kunnen vinden.

bv er staat ergens "ik schop jouw"
ik typ in edit1 "schop"
dan moet ie dus die string vinden en er naar toe 'scrollen' en hem selecteren


dit is wat ik tot nu toe heb
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
int j;
bool e;
AnsiString d;
d = Edit1->Text;
for(j=0;j=ListBox1->Items->Count-1;j=j+1)
  {
  if (d == ListBox1->Items->Strings[j])
    {
    e = true;
    }
  }
if (!e)
  {
  ShowMessage("ja deze film heb je");
  }
  else ShowMessage("nee, deze staat er nog niet bij");
}

hier kijkt hij alleen maar of hij in de listbox staat en de zoekterm moet exact hetzelfde zijn als de string. en dat wil ik niet. (zie boven).

hoe dit op te lossen :?


*I asked for a shotgun, not an anti-aircraft!
- shotgun? that must be the guns that fire a shot....
*yes.. you must be the brains


  • mjax
  • Registratie: September 2000
  • Laatst online: 28-07 20:20
Een klein beetje offtopic, maar tenzij de == operator overloaded is, lijkt me de constructie d == ListBox1->Items->Strings[j] niet gaan werken aangezien je dan pointer met elkaar zit te vergelijken.

  • Tusk
  • Registratie: Juni 2001
  • Laatst online: 28-08 12:26

Tusk

Sticky Bomb likes you!

Topicstarter
hoe zou je het dan doen


*I asked for a shotgun, not an anti-aircraft!
- shotgun? that must be the guns that fire a shot....
*yes.. you must be the brains


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-08 09:55

Creepy

Tactical Espionage Splatterer

mjax schreef op 17 oktober 2002 @ 18:04:
Een klein beetje offtopic, maar tenzij de == operator overloaded is, lijkt me de constructie d == ListBox1->Items->Strings[j] niet gaan werken aangezien je dan pointer met elkaar zit te vergelijken.
Nope.. d is van het type string (niet std::string maar de string van borland), dus de vergelijking zal goed gaan.

listbox1 -> items -> strings[j] kan je schrijven als listbox1 -> items [j];

En kijk eens naar de pos functie. Ik denk dat dat is wat je zoekt.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

mjax schreef op 17 oktober 2002 @ 18:04:
Een klein beetje offtopic, maar tenzij de == operator overloaded is, lijkt me de constructie d == ListBox1->Items->Strings[j] niet gaan werken aangezien je dan pointer met elkaar zit te vergelijken.


het heet niet voor niets een AnsiString, dus daar kun je wel vanuit gaan, denk je ook niet? (ik zie nergens pointers namelijk) :)

Tusk: er bestaat vast wel een InStr of een StrStr functie die naar een string in een andere string zoekt (heeft AnsiString geen find () methode?)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Tusk
  • Registratie: Juni 2001
  • Laatst online: 28-08 12:26

Tusk

Sticky Bomb likes you!

Topicstarter
dat zou ik zo niet weten. ik zal us in de help kijken. ik werk nog niet zo lang met C++


*I asked for a shotgun, not an anti-aircraft!
- shotgun? that must be the guns that fire a shot....
*yes.. you must be the brains


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

Tusk schreef op 17 oktober 2002 @ 18:32:
dat zou ik zo niet weten. ik zal us in de help kijken. ik werk nog niet zo lang met C++


het is wel de bedoeling dat je dat soort dingen zelf opzoekt (daar is tenslotte een manual voor), daar is GoT niet voor bedoeld

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:21
Tusk schreef op 17 oktober 2002 @ 18:32:
dat zou ik zo niet weten. ik zal us in de help kijken. ik werk nog niet zo lang met C++


Dat is altijd het eerste wat je moet doen, in de help kijken.

https://fgheysels.github.io/


  • Tusk
  • Registratie: Juni 2001
  • Laatst online: 28-08 12:26

Tusk

Sticky Bomb likes you!

Topicstarter
dat heb ik ook zitten doen maar kwam er niet uit. maar keb nu iemand via icq die me aant helpen is. dus misschien dadelijk de oplossing


*I asked for a shotgun, not an anti-aircraft!
- shotgun? that must be the guns that fire a shot....
*yes.. you must be the brains


  • Tusk
  • Registratie: Juni 2001
  • Laatst online: 28-08 12:26

Tusk

Sticky Bomb likes you!

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
        int i;
        AnsiString strQuery;
        bool blnGevonden;
        blnGevonden = false;

        strQuery = Edit1->Text;
        if(strQuery != "")
        {
                for(i=0; i <= ListBox1->Items->Count -1;i++)
                {
                  if(ListBox1->Items->Strings[i].Pos(strQuery) != 0)
                        {
                              ListBox1->ItemIndex = i;
                              blnGevonden = true;
                              break;
                        }
                 }

                 if(blnGevonden == false)
                         ShowMessage("Er is niks gevonden..");


        }
}

jeuj dit werkt !!
credits go to tom v oorschot :)

maar nu nog 1 probleempje.
stel je hebt ergens de strings
"slaap te kort"
"bloep"
"aap op een stok"

je typt in edit1 in "aap".
want ik zoek naar aap op stok
maar hij gaat dan naar slaap tekort

nou wil ik net als in notepad en progs etc. dat als je nog een keer klikt hij naar de volgende string gaat die ook "aap" erin heeft staan.


*I asked for a shotgun, not an anti-aircraft!
- shotgun? that must be the guns that fire a shot....
*yes.. you must be the brains


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:21
Zoals reeds eerder gezegd, moet je toch eens proberen om eea zelf uit te zoeken.
GoT is geen forum waar men je bij het handje neemt. Probeer zelf eens te bereiken wat je wilt, en als het niet lukt, of je komt ergens niet uit, post het dan.

Denk gewoon eerst eens in gewone taal wat je wilt.
Zoeken van bij het begin naar het eerste item waar aap in voorkomt.
Bij nogmaals klikken, verder zoeken vanaf het huidige item.

https://fgheysels.github.io/


  • Tusk
  • Registratie: Juni 2001
  • Laatst online: 28-08 12:26

Tusk

Sticky Bomb likes you!

Topicstarter
ok ik zal us gaan kijken. sorry voor mijn idd lame bijna request

tis opgelost.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
{
  int i , offset;
  AnsiString strQuery, curStr;
  bool blnGevonden;

  if(nr == 0){

        blnGevonden = false;

        strQuery = Edit1->Text.LowerCase() ;
        if(strQuery != "")
        {
                for(i=0; i <= ListBox1->Items->Count -1;i++)
                {
                  curStr = ListBox1->Items->Strings[i].LowerCase();
                  if(curStr.Pos(strQuery) != 0)
                        {
                              ListBox1->ItemIndex = i;
                              blnGevonden = true;
                              break;
                        }
                 }

                 if(blnGevonden == false)
                         ShowMessage("Er is niks gevonden..");

                 nr++;
        }
  }else{
        blnGevonden = false;

        offset = ListBox1->ItemIndex;

        strQuery = Edit1->Text.LowerCase() ;
        if(strQuery != "" && offset != -1)
        {
                for(i=offset + 1; i <= ListBox1->Items->Count -1;i++)
                {
                  curStr = ListBox1->Items->Strings[i].LowerCase();
                  if(curStr.Pos(strQuery) != 0)
                        {
                              ListBox1->ItemIndex = i;
                              blnGevonden = true;
                              break;
                        }
                 }

                 if(blnGevonden == false)
                         ShowMessage("Er is niks gevonden..");

        }
   }
}

het werkt. hoe? weet ik niet...dat ga ik nu zelf us lekker uitpluizen.

bedankt voor al jullie reacties. en wat mij betreft mag dit topic gesloten worden


*I asked for a shotgun, not an anti-aircraft!
- shotgun? that must be the guns that fire a shot....
*yes.. you must be the brains


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Damn man, is er eindelijk weer een C++ topic raffelen ze het in strak 55 minuten af, en dan ook nog de 55 minuten in de dag dat ik burgerlijk in de auto naar huis zit in de hoop dat vrouwlief het avondeten klaar heeft.

Dus: geen C++ vragen meer tussen 6 en 7 's avonds!!! Grrr!

:)

Professionele website nodig?


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Ja en dan *weer* over die kl**e AnsiString die niet eens standaard is...wat is er toch tegen std::string hehe :P

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Zoijar schreef op 17 oktober 2002 @ 21:36:
Ja en dan *weer* over die kl**e AnsiString die niet eens standaard is...wat is er toch tegen std::string hehe :P
[hap]
Standaarden zijn relatief... als je binnen een bepaald framework programmeert zijn de klasses van dat framework de standaard. En als dat framework een string-class definieert is die string dus de std::string voor die applicatie... :Y)
[/hap]

Professionele website nodig?


  • abeker
  • Registratie: Mei 2002
  • Laatst online: 28-08 15:41

abeker

...

<offtopic>afgezien van het feit dat die niet lekker naar/uit streams te schrijven/lezen zijn, niks :) </offtopic>

the less one forgets, the less one remembers


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

abeker schreef op 17 oktober 2002 @ 22:55:
<offtopic>afgezien van het feit dat die niet lekker naar/uit streams te schrijven/lezen zijn, niks :) </offtopic>
Uhh heb je het nou over std::string? Want dan moet je toch echt nog is het boekje openslaan ;) hehe

  • abeker
  • Registratie: Mei 2002
  • Laatst online: 28-08 15:41

abeker

...

idd over std::string... wegschrijven van string gaat goed, maar het teruglezen gaat niet goed omdat de lengte van de string niet bekend/bepaald kan worden (lengte/zero terminator wordt niet weggeschreven). Er valt natuurlijk wel omheen te werken...

en idd ik moet me meer verdiepen in de stl :)

the less one forgets, the less one remembers


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 11:37

.oisyn

Moderator Devschuur®

Demotivational Speaker

abeker schreef op 17 oktober 2002 @ 23:15:
idd over std::string... wegschrijven van string gaat goed, maar het teruglezen gaat niet goed omdat de lengte van de string niet bekend/bepaald kan worden (lengte/zero terminator wordt niet weggeschreven). Er valt natuurlijk wel omheen te werken...

en idd ik moet me meer verdiepen in de stl :)


dat heeft niets met std::string zelf te maken, bij een char * zou je dat ook hebben, en ook bij bijvoorbeeld AnsiString

nogal logisch: je stuurt tekst naar een stream, maar niet de lengte van dat stukje, dus het is er ook niet meer uit te halen
Als je 2 ints achter elkaar door een stream stuurt krijg je er ook maar 1 terug (zit tenslotte niets tussen). Tekst is dan ook helemaal niet bedoeld voor serializatie

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

abeker schreef op 17 oktober 2002 @ 22:55:
<offtopic>afgezien van het feit dat die niet lekker naar/uit streams te schrijven/lezen zijn, niks :) </offtopic>
De VCL-klasse AnsiString laat zich heerlijk streamen door de VCL-klasses die afgeleid zijn van TStream. Std::string laat zich heerlijk streamen door std::ostream en std::istream derivants. Wederom: blijf in je framework en staar je niet blind op de zgn. handige standaarden. Pas zodra je 2 frameworks/stdlibs/whatever gaat mixen wordt je code een echte rotzooi en vraag je om wazige bugs.

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

.oisyn schreef op 17 oktober 2002 @ 23:28:
nogal logisch: je stuurt tekst naar een stream, maar niet de lengte van dat stukje, dus het is er ook niet meer uit te halen
Als je 2 ints achter elkaar door een stream stuurt krijg je er ook maar 1 terug (zit tenslotte niets tussen). Tekst is dan ook helemaal niet bedoeld voor serializatie
En daarom doen de streamclasses van mijn eigen framework wel eerst de lengte van de string wegschrijven, zodat (mijn eigen ;) ) strings zich heerlijk laten serializen.

:P

Professionele website nodig?


  • abeker
  • Registratie: Mei 2002
  • Laatst online: 28-08 15:41

abeker

...

.oisyn schreef op 17 oktober 2002 @ 23:28:

[...]

nogal logisch: je stuurt tekst naar een stream, maar niet de lengte van dat stukje, dus het is er ook niet meer uit te halen
Als je 2 ints achter elkaar door een stream stuurt krijg je er ook maar 1 terug (zit tenslotte niets tussen). Tekst is dan ook helemaal niet bedoeld voor serializatie
Ik vind dat dus - in eerste instantie, zonder enige achtergrondkennis van std::string te hebben - niet logisch, ik beschouwde een string als één object. Mijn verwachting was dus dat ik dat object zo weg kon schrijven en weer terug kon lezen, maar dat is helaas niet het geval :( 't is nu iig wel duidelijk waarom het zo is.

the less one forgets, the less one remembers


Verwijderd

curry684 schreef op 17 oktober 2002 @ 22:54:
[hap]
Standaarden zijn relatief... als je binnen een bepaald framework programmeert zijn de klasses van dat framework de standaard. En als dat framework een string-class definieert is die string dus de std::string voor die applicatie... :Y)
[/hap]
[hap]
We hebben het hier al eens over gehad. De STL is meer dan zomaar een famework, het hoort bij de taalspecificatie en de taal wordt zo verder ontwikkeld dat het de STL het meest ten goede komt. (En als jij dingen in namespace std gaat zitten schrijven dan zit je al goed fout volgens de standaard.)
[/hap]

Het probleem met de C++ is dat de STL de "te laat" gekomen is, waardoor er een wildgroei van "local standards" is ontstaan. Eigenlijk is de STL voor een groot deel in het leven geroepen om deze wildgroei tegen te gaan, want het ontbreken van een "global standard" maakt de taal onhanteerbaar en onleerbaar.

Dat zie je helaas ook telkens weer op dit forum; er ontstaan soms haast babylonische spraakverwarringen, die de beginner met het probleem ongetwijfeld vaak nog verwarder achterlaten dan hij was voor hij de vraag postte.

Laten we dus in godsnaam niet telkens liggen kissebissen over de STL vs. andere library; de heren bij ANSI hebben nu eenmaal de STL ingevoerd en niet een andere library. Het is toch duidelijk dat je iemand die de complexe taal C++ leert niet meteen moet opzadelen met allerlei incompatibiliteiten en erfenissen uit het verleden (zoals C-strings en "naakte" pointers).
Pagina: 1