string met lines in txt file vergelijken

Status
Niet open voor verdere reacties.

stykurgh

Gebruiker
Lid geworden
6 jul 2009
Berichten
715
hallo,

ik wil graag iets maken dat je een woord in kan voeren en dat je dan een tekst file hebt met heel veel woorden erin, en dat mijn programma dan dat woord wat je invoert gaat vegelijken met dat in de txt file. ik weet alleen niet hoe je dat doet? moet je dan gewoon telkens een line uit de txt file halen en die vergelijken en dan de volgende eruit halen? of is er een makkelijkere manier?

mvg

michel
 
Het ligt er een beetje aan hoeveel tekst het is. Bij een grote hoeveelheid woorden de tekst sorteren op alfabet. eventueel ergens opslaan op welke regel A, B, C, D etc. begint. Bij extreme hoeveelheid woorden kun je ook een lijst maken met AA, AB, AC, etc.

vervolgens eerste (of eerste 2) letter van het woord dat je wil opzoeken bepalen en dan beginnen op die regel met zoeken.

Als dat nog niet snel genoeg gaat kun je skip zoeken toepassen. je gaat dan steeds 20 of zo lijnen verder en als blijkt dat je te ver bent begin je een voor een.
 
meer thread tegelijk laten draaien maakt het zoveel keer sneller als er threads zijn.
 
ReadFile( hFile, lpBuffer, nNumberOfBytesToRead, lpNumberOfBytesRead, lpOverlapped );

strstr( LPSTR ( lpBuffer ), "De string die je zoekt" );
 
Het ligt er een beetje aan hoeveel tekst het is. Bij een grote hoeveelheid woorden de tekst sorteren op alfabet. eventueel ergens opslaan op welke regel A, B, C, D etc. begint. Bij extreme hoeveelheid woorden kun je ook een lijst maken met AA, AB, AC, etc.

vervolgens eerste (of eerste 2) letter van het woord dat je wil opzoeken bepalen en dan beginnen op die regel met zoeken.

Als dat nog niet snel genoeg gaat kun je skip zoeken toepassen. je gaat dan steeds 20 of zo lijnen verder en als blijkt dat je te ver bent begin je een voor een.

Als je het al gesorteerd hebt kun je net zo goed binair zoeken, skippen lijkt me dan nogal nutteloos ^^.
 
bedankt voor alle reacties!

als je btw meerdere threads draait heb je dan gewoon in een window meerdere loops ofzo? hoe doe je dat dan?

en is het ook mogelijk om in het DoS programma een tweede DoS venster te openen en daar iets in te draaien? en hoe precies.
 
Dat meerdere threads tegelijk draaien kan een hoop vervelende dingen waar je rekening mee moet houden met zich meenemen. Ik zou er nog maar even niet aan beginnen. En dat zal alleen extra snelheid halen als je meerdere processoren in je computer hebt zitten.

Hou het bij één van de simpelere oplossingen, werk die uit en als je merkt dat het te traag is voor je doeleinden kun je kijken naar een andere manier.
 
het gaat best wel traag eigenlijk dus ik zou er wel graag naar willen kijken. en ik heb een dual core cpu dus dat kan dan ook gewoon.. kan iemand misschien uitleggen hoe dat precies gaat om een extra thread te laten draaien?
 
CreateThread()

Dat is alles, als het programme begint, bijvoorbeeld zo:
Code:
int main()
{
createhread(x)// zo werkt het NATUURLIJK niet, maar als voorbeeld
int x = 2;
x = x + 2;
}

x()
{
Sleep(INFINITE)
}

dan gaat na createhread de main loop gewoon door, dus het programma runt meerdere dingen tegelijk. Dit gaat ALTIJD sneller als ej grote dingen moet doen, zoals memory scannen, dingen lezen etc.
 
CreateThread()

Dat is alles, als het programme begint, bijvoorbeeld zo:
Code:
int main()
{
createhread(x)// zo werkt het NATUURLIJK niet, maar als voorbeeld
int x = 2;
x = x + 2;
}

x()
{
Sleep(INFINITE)
}

dan gaat na createhread de main loop gewoon door, dus het programma runt meerdere dingen tegelijk. Dit gaat ALTIJD sneller als ej grote dingen moet doen, zoals memory scannen, dingen lezen etc.

Onzin.

Dit gaat niet altijd sneller. Het enige wat er gebeurt is dat het OS de threads omstebeurt een klein beetje rekentijd geeft, tenzij je meerdere processoren hebt. In het laatste geval wordt de extra thread op de extra processor gedraaid en zal het dus sneller gaan.
Als je niet gebruik kan maken van meerdere processoren en je hebt niet een of ander algoritme dat sneller is dan een ander algoritme wat gewoon lineair draait, zou het zelfs ietsiepietsie langzamer kunnen gaan door het switchen tussen threads door het OS.

Ik heb zelf nooit in C++ met threads gewerkt, maar boost::thread lijkt me een goede plek om een kijkje te nemen: http://www.boost.org/doc/libs/1_44_0/doc/html/thread.html
 
Laatst bewerkt:
bedankt voor de reactie!

ik heb een beetje naar dat boost gekeken alleen het werkt niet helemaal.

ik vond dit voorbeeld op een site:

[CPP]#include <boost/thread/thread.hpp>
#include <iostream>

void hello()
{
std::cout <<
"Hello world, I'm a thread!"
<< std::endl;
}

int main()
{
boost::thread thrd(&hello);
thrd.join();
return 0;
}

[/CPP]


ik krijg linker errors. ik heb wel de libs geinclude en ze staan ook in de map van mijn compiler.

iemand een idee?
 
Ik kan alleen C, dus ik weet niet hoe dat zit in C++, maar in C zou het er zo uit moeten zien ...

[CPP]
#include <boost/thread/thread.hpp>
#include <iostream>

void hello();

void hello()
{
std::cout <<
"Hello world, I'm a thread!"
<< std::endl;
}

int main()
{
boost::thread thrd(&hello);
thrd.join();
return 0;
}[/CPP]
 
dat maakt niks uit. het gaat om die boost:thread stukjes

het zijn btw dit soort errors:

[linker error] undefined reference to boost::thread::~thread()


en meer van dat soort xD

er mist duidelijk ergens iets, maar wat xD
 
Laatst bewerkt:
Het lijkt er toch op dat je een .dll of .lib nog ergens moet meelinken in je project, weet je zeker dat dit goed gebeurd is?
 
ik heb 1 file geinclude, en die staat in de include map van mijn compiler. dat is alles wat ik nodig heb toch?
 
In dat header bestand staan waarschijnlijk alleen de declaraties van functies ed, niet de definities ervan. Die staan dan bijvoorbeeld in een .lib of .dll bestand. Om succesvol te compileren zul je dus die ook mee moeten linken.
Google even rond op "how to link a c++ library with <vul hier je IDE in>" en welke je dan bij boost::thread moet linken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan