GTA Közösség - A magyar GTA fórum

San Andreas Multiplayer (SA-MP) => SA-MP: Szerverfejlesztés => Segítségkérés => A témát indította: tudvari - 2014. április 18. - 08:49:27

Cím: strcmp redefiniálása
Írta: tudvari - 2014. április 18. - 08:49:27
Sziasztok!
Valaki megtudná adni az strcmp definícióját,hogy átírhassam úgy,hogy az ékezetes betût ne különböztesse meg a normáltól?
Vagy ha valakinek már van készen,azt is megköszönném.
Másik megoldás:
nem az strcmp-t átírni,hanem a az sscanfot,hogy a paramétereket \"ékezetlenítse\".
Cím: strcmp redefiniálása
Írta: Flash - 2014. április 18. - 18:14:04
http://sampforum.hu/index.php?topic=52049.msg493031#msg493031
 
UI.: A zcmd tartalmazza az ékezetes parancsokat[/quote]
Cím: strcmp redefiniálása
Írta: tudvari - 2014. április 18. - 18:20:05
A ZCMD-t már megcsináltam,csak az a baj,hogy a paramétereire ez nem vonatkozik.
Cím: strcmp redefiniálása
Írta: KovaNovik - 2014. április 18. - 18:25:36
Én épp egy ilyent csinálok. Az a lényege, hogy végigfut a strong minden karakterén, megnézi tartalmazza-e bármelyik ékezetes betût, és ha igen, akkor lecseréli.
Tipp: ahogyan azt a neveknél is használjuk, ide is kell elé if, mert különben ha nincs benne, kiszedné az egész karakterláncot (-1-es karakterre hivatkozva).
 
if(strfind(karil, \"á\") != -1) karil[strfind(karil, \"á\")] = a

 
Tehát ha van benne, akkor azt a karaktert, amelyikben megtalálta, cserélje le.. Sok ilyennel beloopolni, és a végén strcmpvel leellenõrizni. Sokkal rövidebb és dinamikusabb módszert (tömbbõl kiválasztás) is találtam, de nem volt türelmem megírni egy kerek egész funkcióvá.
U.i.: szímodból lopd ki az Eegyezik függvényt (asszem). :D
U.i.2.: Flash csak az elvet mutatta, hogy az alapján cserélhetnéd ki. Csak nem írta oda xd.
Cím: strcmp redefiniálása
Írta: tudvari - 2014. április 18. - 22:53:02
D:\\SAMP\\gamemodes\\modinventory.pwn(31767) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31768) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31769) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31770) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31771) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31775) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31776) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31777) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31778) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31779) : error 006: must be assigned to an array

 

stock ujstrcmp(kari1[],kari2[],bool:Igaz)
{
for(new x=0;x<strlen(kari1);x++)
{
if(strcmp(kari1
  • ,\"á\",true) == 0) { kari1
  • =\"a\"; }

if(strcmp(kari1
  • ,\"é\",true) == 0)  { kari1
  • =\"e\"; }

if(strcmp(kari1
  • ,\"í\",true) == 0)  { kari1
  • =\"i\"; }

if(strcmp(kari1
  • ,\"ó\",true) == 0  || strcmp(kari1
  • ,\"ö\",true) == 0 || strcmp(kari1
  • ,\"õ\",true) == 0) { kari1
  • =\"o\"; }

if(strcmp(kari1
  • ,\"ü\",true) == 0  || strcmp(kari1
  • ,\"û\",true) == 0 || strcmp(kari1
  • ,\"ú\",true) == 0) { kari1
  • =\"u\"; }

}
for(new x=0;x<strlen(kari2);x++)
{
if(strcmp(kari2
  • ,\"á\",true) == 0) { kari2
  • =\"a\"; }

if(strcmp(kari2
  • ,\"é\",true) == 0)  { kari2
  • =\"e\"; }

if(strcmp(kari2
  • ,\"í\",true) == 0)  { kari2
  • =\"i\"; }

if(strcmp(kari2
  • ,\"ó\",true) == 0  || strcmp(kari2
  • ,\"ö\",true) == 0 || strcmp(kari2
  • ,\"õ\",true) == 0) { kari2
  • =\"o\"; }

if(strcmp(kari2
  • ,\"ü\",true) == 0  || strcmp(kari2
  • ,\"û\",true) == 0 || strcmp(kari2
  • ,\"ú\",true) == 0) { kari2
  • =\"u\"; }

}
return strcmp(kari1,kari2,true);
}

 
hmmm
[mod]Pawn code tagbe tettem.[/mod]
Cím: strcmp redefiniálása
Írta: KovaNovik - 2014. április 18. - 22:59:16
Az ifek után, ha csak egy sor van, felesleges a kapcsos zárójel. Amúgy mi lenne ha csinálnál egy másik kari1-et és kari2-t, ami nem string, hanem karakter tömb lenne?
 
new kari1uj[sizeof(kari1) char], kari2uj[sizeof(kari2) char];

 
És ezeket egyenlõvé tennéd az eredetikkel, vagy beleformatolnád, és úgy kezelnéd õket?
(Ezt hiv. Fórumon láttam memóriaspórolás topikban)
Cím: strcmp redefiniálása
Írta: tudvari - 2014. április 18. - 23:03:34
csak ezt hogy csináljam meg? bár szerintem az enyémnek is mûködnie kéne.
Cím: strcmp redefiniálása
Írta: KovaNovik - 2014. április 18. - 23:13:10
Hát másold be a kódot amit írtam, és
 

kari1uj = kari1;
kari2uj = kari2;
//Lehet, hogy a karakter tömbön jobban végig tud futni. Emellett, még azt találtam ugyanabban az optimalizálós topikban:
for ( new i, l = strlen( string ); i != l; i++ )

 
Nem tudom ez miben más, de próbáld ezzel is.
Mondjuk, a karaktertömböt máshogy kell kezelni:
http://forum.sa-mp.com/showthread.php?t=216730
Lásd a nagy piros betûs Note! Résznél.
Ha végképp nem megy, itt az strreplace függvény:
http://forum.sa-mp.com/showthread.php?t=396978
Vagy esetleg a Flash által linkelt packban lévõ zcmdbõl kiszedni a replaceaccent függvényt, és ezzel végig futni a stringen:
 

stock
replaceaccent(ch)
{
switch(ch)
{
case \'á\': return \'a\';
        case \'é\': return \'e\';
case \'í\': return \'i\';
case \'ó\',\'ö\',\'õ\': return \'o\';
case \'ú\',\'ü\',\'û\': return \'u\';
}
return ch;
}
stock ujstrcmp(kari1[], kari2[], bool:ignoreaccent)
{
for ( new i, l = strlen( kari1 ); i != l; i++ ) kari1 = replaceaccent(kari1);
//ugyanezt a kari 2 vel
//majd strcmp
}

 
Ez rövidebb, csak megy-e.
Bocsi a helyesírásért, de teló és este van.
U.i.: A pawn kód nem kezeli rendesen az õ û betûke, de gondolom kivehetõ. :)
Amúgy a te megoldásodnál az egyenlõnél ott a betût \"a\" helyett \'a\' ba kell tenni. Asszem.
Cím: strcmp redefiniálása
Írta: tudvari - 2014. április 18. - 23:48:16
Igen,ennyi volt a baj.Köszi.
Cím: strcmp redefiniálása
Írta: tudvari - 2014. április 18. - 08:49:27
Sziasztok!
Valaki megtudná adni az strcmp definícióját,hogy átírhassam úgy,hogy az ékezetes betût ne különböztesse meg a normáltól?
Vagy ha valakinek már van készen,azt is megköszönném.
Másik megoldás:
nem az strcmp-t átírni,hanem a az sscanfot,hogy a paramétereket \"ékezetlenítse\".
Cím: strcmp redefiniálása
Írta: Flash - 2014. április 18. - 18:14:04
http://sampforum.hu/index.php?topic=52049.msg493031#msg493031
 
UI.: A zcmd tartalmazza az ékezetes parancsokat[/quote]
Cím: strcmp redefiniálása
Írta: tudvari - 2014. április 18. - 18:20:05
A ZCMD-t már megcsináltam,csak az a baj,hogy a paramétereire ez nem vonatkozik.
Cím: strcmp redefiniálása
Írta: KovaNovik - 2014. április 18. - 18:25:36
Én épp egy ilyent csinálok. Az a lényege, hogy végigfut a strong minden karakterén, megnézi tartalmazza-e bármelyik ékezetes betût, és ha igen, akkor lecseréli.
Tipp: ahogyan azt a neveknél is használjuk, ide is kell elé if, mert különben ha nincs benne, kiszedné az egész karakterláncot (-1-es karakterre hivatkozva).
 
if(strfind(karil, \"á\") != -1) karil[strfind(karil, \"á\")] = a

 
Tehát ha van benne, akkor azt a karaktert, amelyikben megtalálta, cserélje le.. Sok ilyennel beloopolni, és a végén strcmpvel leellenõrizni. Sokkal rövidebb és dinamikusabb módszert (tömbbõl kiválasztás) is találtam, de nem volt türelmem megírni egy kerek egész funkcióvá.
U.i.: szímodból lopd ki az Eegyezik függvényt (asszem). :D
U.i.2.: Flash csak az elvet mutatta, hogy az alapján cserélhetnéd ki. Csak nem írta oda xd.
Cím: strcmp redefiniálása
Írta: tudvari - 2014. április 18. - 22:53:02
D:\\SAMP\\gamemodes\\modinventory.pwn(31767) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31768) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31769) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31770) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31771) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31775) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31776) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31777) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31778) : error 006: must be assigned to an array
D:\\SAMP\\gamemodes\\modinventory.pwn(31779) : error 006: must be assigned to an array

 

stock ujstrcmp(kari1[],kari2[],bool:Igaz)
{
for(new x=0;x<strlen(kari1);x++)
{
if(strcmp(kari1
  • ,\"á\",true) == 0) { kari1
  • =\"a\"; }

if(strcmp(kari1
  • ,\"é\",true) == 0)  { kari1
  • =\"e\"; }

if(strcmp(kari1
  • ,\"í\",true) == 0)  { kari1
  • =\"i\"; }

if(strcmp(kari1
  • ,\"ó\",true) == 0  || strcmp(kari1
  • ,\"ö\",true) == 0 || strcmp(kari1
  • ,\"õ\",true) == 0) { kari1
  • =\"o\"; }

if(strcmp(kari1
  • ,\"ü\",true) == 0  || strcmp(kari1
  • ,\"û\",true) == 0 || strcmp(kari1
  • ,\"ú\",true) == 0) { kari1
  • =\"u\"; }

}
for(new x=0;x<strlen(kari2);x++)
{
if(strcmp(kari2
  • ,\"á\",true) == 0) { kari2
  • =\"a\"; }

if(strcmp(kari2
  • ,\"é\",true) == 0)  { kari2
  • =\"e\"; }

if(strcmp(kari2
  • ,\"í\",true) == 0)  { kari2
  • =\"i\"; }

if(strcmp(kari2
  • ,\"ó\",true) == 0  || strcmp(kari2
  • ,\"ö\",true) == 0 || strcmp(kari2
  • ,\"õ\",true) == 0) { kari2
  • =\"o\"; }

if(strcmp(kari2
  • ,\"ü\",true) == 0  || strcmp(kari2
  • ,\"û\",true) == 0 || strcmp(kari2
  • ,\"ú\",true) == 0) { kari2
  • =\"u\"; }

}
return strcmp(kari1,kari2,true);
}

 
hmmm
[mod]Pawn code tagbe tettem.[/mod]
Cím: strcmp redefiniálása
Írta: KovaNovik - 2014. április 18. - 22:59:16
Az ifek után, ha csak egy sor van, felesleges a kapcsos zárójel. Amúgy mi lenne ha csinálnál egy másik kari1-et és kari2-t, ami nem string, hanem karakter tömb lenne?
 
new kari1uj[sizeof(kari1) char], kari2uj[sizeof(kari2) char];

 
És ezeket egyenlõvé tennéd az eredetikkel, vagy beleformatolnád, és úgy kezelnéd õket?
(Ezt hiv. Fórumon láttam memóriaspórolás topikban)
Cím: strcmp redefiniálása
Írta: tudvari - 2014. április 18. - 23:03:34
csak ezt hogy csináljam meg? bár szerintem az enyémnek is mûködnie kéne.
Cím: strcmp redefiniálása
Írta: KovaNovik - 2014. április 18. - 23:13:10
Hát másold be a kódot amit írtam, és
 

kari1uj = kari1;
kari2uj = kari2;
//Lehet, hogy a karakter tömbön jobban végig tud futni. Emellett, még azt találtam ugyanabban az optimalizálós topikban:
for ( new i, l = strlen( string ); i != l; i++ )

 
Nem tudom ez miben más, de próbáld ezzel is.
Mondjuk, a karaktertömböt máshogy kell kezelni:
http://forum.sa-mp.com/showthread.php?t=216730
Lásd a nagy piros betûs Note! Résznél.
Ha végképp nem megy, itt az strreplace függvény:
http://forum.sa-mp.com/showthread.php?t=396978
Vagy esetleg a Flash által linkelt packban lévõ zcmdbõl kiszedni a replaceaccent függvényt, és ezzel végig futni a stringen:
 

stock
replaceaccent(ch)
{
switch(ch)
{
case \'á\': return \'a\';
        case \'é\': return \'e\';
case \'í\': return \'i\';
case \'ó\',\'ö\',\'õ\': return \'o\';
case \'ú\',\'ü\',\'û\': return \'u\';
}
return ch;
}
stock ujstrcmp(kari1[], kari2[], bool:ignoreaccent)
{
for ( new i, l = strlen( kari1 ); i != l; i++ ) kari1 = replaceaccent(kari1);
//ugyanezt a kari 2 vel
//majd strcmp
}

 
Ez rövidebb, csak megy-e.
Bocsi a helyesírásért, de teló és este van.
U.i.: A pawn kód nem kezeli rendesen az õ û betûke, de gondolom kivehetõ. :)
Amúgy a te megoldásodnál az egyenlõnél ott a betût \"a\" helyett \'a\' ba kell tenni. Asszem.
Cím: strcmp redefiniálása
Írta: tudvari - 2014. április 18. - 23:48:16
Igen,ennyi volt a baj.Köszi.