Szerző Téma: [Különóra] Strcmp és mûködése  (Megtekintve 6142 alkalommal)

Nem elérhető Olie

  • 892
  • Roleplay Õrült
    • Profil megtekintése
[Különóra] Strcmp és mûködése
« Dátum: 2012. Szeptember 27. - 08:05:19 »
0
Sziasztok!
Valaki már az elsõ leckénél felvetette, hogy miért Zcmd-t használunk.
Rögtön érkezett rá a válasz is. Gyors, egyszerû.
Úgy gondoltam, hogy így, egyfajta a tananyaghoz nem, vagy csak alig-alig kapcsolódó leckében bemutatnám az strcmp mûködését.
1.) Mi az Stcmp jelentése?
Az Strcmp jelentése \"StringCompare\"
2.) Mit csinál az Strcmp?
Két Stringet hasonlít össze egymással.
3.) Hogyan mûködik?
Az Strcmp egyesével összehasonlítja a két stringben megegyezõ karaktereket.
Tehát, ha össze akarod hasonlítani a \"Szia\" és a \"Szia\" stringet, (Ami ugyan az) akkor az Strcmp ezt fogja csinálni:
Kiveszi az elsõbõl az \"S\" Karaktert, és összehasonlítja a másik Stringben lévõ \"S\" karakterrel.
A Karakterek megegyeznek. Mindezt addig csinálja, amíg az egyik stringben kevesebb karakter lesz, mint a másik, vagy a két karakter nem fog megegyezni.
Tehát:
Ha egy \"Szia\" és egy \"Sziamia\" stringet hasonlítunk össze, akkor õ az elsõ a-ig jut.
Az Strcmp-nél szintén meg lehet adni, hogy mit csináljon, ha a két string egyezik, és mit csináljon, ha nem.
Például:
 

if(strcmp(\"Szia\", \"Szia\") == 0)
{
    SendClientMessage(playerid, 0x0FFF, \"Ezt fogja elküldeni, ha a két string megegyezik\");
}
else
{
    SendClientMessage(playerid, 0x0FFF, \"És ezt, ha nem egyezik meg, tehát különbözik\");
}

 
Persze, gondolom, hogy a kezdõ szerverüzemeltetõk csak a Parancsok létrehozására használják.
A Zcmd-vel ellentétben itt a parancsokat az OnPlayerCommandText alá kell írni.
 

public OnPlayerCommandText()
{
// Ide jöhetnek a parancsok
}

 
Az Strcmp nem csak a pawn-ban fordul elõ, hanem például a Javaban is! :)
« Utoljára szerkesztve: 2012. Október 09. - 18:35:11 írta Olie »

Nem elérhető bendor

  • 2949
    • Profil megtekintése
[Különóra] Strcmp és mûködése
« Válasz #1 Dátum: 2012. Október 09. - 18:54:37 »
0
Szép leírás,bár nem sokan használnak már strcmp-t :D

Nem elérhető Olie

  • 892
  • Roleplay Õrült
    • Profil megtekintése
[Különóra] Strcmp és mûködése
« Válasz #2 Dátum: 2012. Október 09. - 19:00:21 »
0
Idézetet írta: Bendor date=1349801677\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"28006\" data-ipsquote-contentclass=\"forums_Topic
Szép leírás,bár nem sokan használnak már strcmp-t :D
 
Sok mód épül még rá, amiben az ékezet nem zcmd+fixchars hanem csak szimpla strcmp.
Nem olyan gyors, de el kell ismerni, hogy stabilan mûködik.
Az elsõ módomban anno én is strcmp-t használtam. :)

Nem elérhető Gabor..

  • 1883
  • Gabor..
    • Profil megtekintése
[Különóra] Strcmp és mûködése
« Válasz #3 Dátum: 2012. Október 09. - 19:26:03 »
0
Idézetet írta: Bendor date=1349801677\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"28006\" data-ipsquote-contentclass=\"forums_Topic
Szép leírás,bár nem sokan használnak már strcmp-t :D
 
A strcmp() függvény nem csak parancshoz használható... Ez egy összehasonlító függvény, magyarán stringeket hasonlíthatsz össze.
Például én is használom a módomban nem is egy helyen, de nem szerver parancsot betöltõ funkciója van.
« Utoljára szerkesztve: 2012. Október 09. - 19:27:46 írta Gabor.. »

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
[Különóra] Strcmp és mûködése
« Válasz #4 Dátum: 2012. Október 10. - 18:49:04 »
0
Igen, a strcmp() például egy regisztrációs rendszerben kell.

[Különóra] Strcmp és mûködése
« Válasz #5 Dátum: 2012. Október 10. - 20:21:41 »
+2
Itt megjegyezném hogy az strcmp sokkal gyorsabb mint akármilyen parancsfeldolgozó.
A sebesség különbség a a parancsok számának növekedése miatt alakult ki.
Például érthetõbben:
Ha egy két darab parancsot használunk egy filterscriptben tök felesleges zcmd vagy bármilyen parancs feldolgozó használata.
Az idõ veszteség a sok parancs miatt jött létre, emiatt teret nyertek a különbözõ parancsfeldolgozók hiszen nem történik akár több száz felesleges összehasonlítás.
Az OnPlayerCommandText alatt szereplõ strcmp (karakterlánc összehasonlítás) sorban egymás után következnek egészen addig míg nem talál egyezést, így mire végrehajtásra kerül az általunk beírt parancs, az strmcp vagy ~100-szor meghívásra került. (mert annyi más egyéb parancs van írva a szkript kódba).
Régebben úgy lehetett optimalizálni a parancsokat hogy az OnPlayerCommandText alatt úgy helyeztem el a parancsokat hogy melyek a legtöbbet használt parancs.
Egy rendszer segítségével megnéztem hogy a játékosok melyik parancsot használták a legtöbben, és azt helyeztem elõre a parancsok közt. (köztudott hogy a kód sorról sorra halad lefelé, minél elõbb megtalálja azt amit szeretnénk annál hamarabb sikeres végrehajtás és visszatérés/lefutás lesz az eredménye).
Utána azt is figyelembe kellett venni hogy melyik OnPlayerCommandText callback kerül legelsõnek meghívásra. (ez a legelsõ filterscriptben történik meg).
Ok elég lesz.  :D
Végszóként annyit, hogy parancsfeldolgozó rendszert (zcmd, dcmd, ycmd stb.) akkor használjunk ha túl sok parancsot alkalmazunk a módunkban, filterszkriptünkben, ha csak egy két parancsunk van, akkor kerüljük használatukat!

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal