Szerző Téma: strcmp redefiniálása  (Megtekintve 1209 alkalommal)

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
strcmp redefiniálása
« Dátum: 2014. április 18. - 08:49:27 »
0 Show voters
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\".
« Utoljára szerkesztve: 2014. április 18. - 08:52:59 írta tudvari »

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
strcmp redefiniálása
« Válasz #1 Dátum: 2014. április 18. - 18:14:04 »
0 Show voters
http://sampforum.hu/index.php?topic=52049.msg493031#msg493031
 
UI.: A zcmd tartalmazza az ékezetes parancsokat[/quote]

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
strcmp redefiniálása
« Válasz #2 Dátum: 2014. április 18. - 18:20:05 »
0 Show voters
A ZCMD-t már megcsináltam,csak az a baj,hogy a paramétereire ez nem vonatkozik.

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
strcmp redefiniálása
« Válasz #3 Dátum: 2014. április 18. - 18:25:36 »
0 Show voters
É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.
« Utoljára szerkesztve: 2014. április 18. - 18:33:26 írta KovaNovik »

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
strcmp redefiniálása
« Válasz #4 Dátum: 2014. április 18. - 22:53:02 »
0 Show voters
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]
« Utoljára szerkesztve: 2014. április 19. - 00:20:02 írta Dfoglalo »

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
strcmp redefiniálása
« Válasz #5 Dátum: 2014. április 18. - 22:59:16 »
0 Show voters
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)
« Utoljára szerkesztve: 2014. április 18. - 23:03:12 írta KovaNovik »

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
strcmp redefiniálása
« Válasz #6 Dátum: 2014. április 18. - 23:03:34 »
0 Show voters
csak ezt hogy csináljam meg? bár szerintem az enyémnek is mûködnie kéne.

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
strcmp redefiniálása
« Válasz #7 Dátum: 2014. április 18. - 23:13:10 »
0 Show voters
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.
« Utoljára szerkesztve: 2014. április 18. - 23:39:44 írta KovaNovik »

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
strcmp redefiniálása
« Válasz #8 Dátum: 2014. április 18. - 23:48:16 »
0 Show voters
Igen,ennyi volt a baj.Köszi.

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
strcmp redefiniálása
« Válasz #9 Dátum: 2014. április 18. - 08:49:27 »
0 Show voters
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\".
« Utoljára szerkesztve: 2014. április 18. - 08:52:59 írta tudvari »

Nem elérhető Flash

  • 5726
  • (っ◕‿◕)っ
    • Profil megtekintése
strcmp redefiniálása
« Válasz #10 Dátum: 2014. április 18. - 18:14:04 »
0 Show voters
http://sampforum.hu/index.php?topic=52049.msg493031#msg493031
 
UI.: A zcmd tartalmazza az ékezetes parancsokat[/quote]

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
strcmp redefiniálása
« Válasz #11 Dátum: 2014. április 18. - 18:20:05 »
0 Show voters
A ZCMD-t már megcsináltam,csak az a baj,hogy a paramétereire ez nem vonatkozik.

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
strcmp redefiniálása
« Válasz #12 Dátum: 2014. április 18. - 18:25:36 »
0 Show voters
É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.
« Utoljára szerkesztve: 2014. április 18. - 18:33:26 írta KovaNovik »

Nem elérhető tudvari

  • 1264
  • Fejlesztő
    • Profil megtekintése
strcmp redefiniálása
« Válasz #13 Dátum: 2014. április 18. - 22:53:02 »
0 Show voters
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]
« Utoljára szerkesztve: 2014. április 19. - 00:20:02 írta Dfoglalo »

Nem elérhető KovaNovik

  • 1121
  • KovaNovik
    • Profil megtekintése
strcmp redefiniálása
« Válasz #14 Dátum: 2014. április 18. - 22:59:16 »
0 Show voters
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)
« Utoljára szerkesztve: 2014. április 18. - 23:03:12 írta KovaNovik »

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal