[Pawn]String library
Evo, posto vidim da se svi patite i komplicirate sebi zivot ( a i drugima ) sa stringovima, varijablama, uporedjivanjima i slicno, odlucio sam da vas upoznam sa laksim nacinom. To jeste laksim nacinom izvodjenja kompliciranih naredbi pomocu najjednostavnijih funkcija...
Evo da vas upoznam sa prvom funkcijom koja po mom misljenju i nema neki znacaj, posto stvari koje ja radim ne zahtjevaju ovakve funckije...
1# funckija je i ujedno najrasirenija i najkomplikovanija, iako slabo tko zna sta ona zapravo radi, ja cu vam objasniti:
Strcmp(const string1[], const string2[], bool:ignorecase, length);
Ovo je funckija koja sluzi za uporedjivanje 2 stringa/sloga. Njeni argumenti su:
string1[] - Prvi string
string2[] - Drugi string
bool:ignorecase - E ovo je ono sto vecinu zbunjuje, a sama rijec kaze: "ignorecase", ako stavite true vrijedit ce:
KuCa ce biti isto kao kuca pa time ce returnati 0 ( sjetite se u GF-u uvijek onoga == 0 poslije strmp :) ), a ako stavite false:
kuca nece biti jednako KuCa i onda ce returnati 1 ili -1, zavisno od mjesta stringa ( -1 ako je string1 prije stringa2, a 1 ako je obrnuto)
length ( opcionalno ) - Kada ovo postavite, vi postavljate "daljinu" do koje strcmp uporeÄ'uje 2 stringa. npr. Kuca ce biti jednako Kufa ako stavite duzinu = 3.
2# funkcija je strfind. I ona je donekle poznata mnogima...
Da ovo objasnimo možemo se posluziti jednostavnim primjerom iz zivota: Traženje igle u plastu sijena... Upravo to ova funkcija radi, trazi neki skup znakova u stringu.
Strfind(const string[],const sub[],bool:ignorecase=false,pos=0)
const string[] - slog/string u kojem zelimo da nadjemo skup znakova.
const sub[] - skup znakova koji trazimo u stringu.
bool:ignorecase - isto kao i za strcmp ( procitati paragraf iznad za vise informacija )
pos - mjesto u stringu odakle pocinje pretraga
#3 funkcija, manje poznata, ali ipak veoma bitna i jednostavna je funkcija strdel. Ona sluzi za brisanje odreÄ'enog dijela gdje se u argumentu oznacava raspon brisanja.
Strdel(string[], start, end)
string[] - string iz kojeg zelimo da brisemo znakovni niz.
start â€" pozicija znaka u stringu
end â€" pozicija do koje se brise
4# funkcija, isto manje poznata funkcija je strins, koja sluzi za ubacivanje jednog manjeg stringa u drugi veci string.
Strins(string[],const substr[],pos,maxlength=sizeof string)
string[] â€" string u koji zelite da ubacite ovaj manji
const substr[] â€" string koji ubacujete
pos â€" pozicija u stringu odakle zelite da pocnete ubacivanje
maxlength=sizeof string â€" maksimalna duzina za ubaciti
5# funkcija, veoma popularna funkcija i po meni jedna od najbitnijih je strlen. Ona vraca duzinu stringa u obliku integera.
Strlen(const string[])
const string â€" string od kojeg odredujemo duzinu
#6 funkcija, veoma popularna, ali i ne manje vazna je funkcija strmid. Ona uzima dio znakova iz stringa/sloga i prebacuje ga u drugi ( male slicnosti sa funkcijom strins ).
Strmid(dest[],const source[],start,end,maxlength=sizeof dest)
dest[] â€" string u kojeg zelimo da ubacimo dio drugog
const source[] â€" string koji ubacujemo u dest[]
start â€" pozicija prvog znaka
end â€" pozicija posljednjeg znaka
maxlength=sizeof dest â€" duzina dest[]
7# funkcija, veoma korisna ali gotov zaboravljena funkcija je strpack. Ova funkcija kreira “upakovanog†kopiju stringa.
Strpack(dest[],const source[],maxlength=sizeof dest)
dest[] â€" string u kojeg zelite da spremite “upakirani†string
const source[] â€" izvor “upakiranog†stringa
maxlength=sizeof dest â€" duzina dest[]
8# funkcija koja je povezana sa proslom je strunpack. Ona kreira “ispakovanu†kopiju stringa.
Strunpack(dest[], const source[],maxlength=sizeof dest)
dest[] - string u kojeg zelite da spremite “ispakovani†string
const source[] â€" izvor “ispakovanog†stringa
maxlength=sizeof dest â€" duzina dest[]
#9 funkcija jos manje poznata funkcija je valstr. Iako je nepopularna veoma je korisna. Ona pretvara integer u string.
Valstr(dest[], value, bool:packed/unpacked)
dest[] â€" string u koji zelite da ubacite value
value â€" integer koji ubacujete u dest[]
bool:packed/unpacked â€" da li zelite da string bude “upakovan†ili “ispakovan†(true/false)
#16 funkcija, isto slabo popularna funkcija je floatstr. Ona pretvara string u float.
floatstr(const string[])
const string[] - string koji zelis da prtvoris
#11 funkcija, jedna od najpopularnijih je strval. Veoma jednostavna, pretvara string u integer. Obrnuto od valstr.
Strval(string[])
string[] â€" string za pretvoriti.
#12 funkcija, negdje je ima, negdje nema… Ta funkcija je strcat. Ona nadovezuje jedan string na drugi, kao lanac...
Strcat(dest[], string[],maxlength=sizeof string)
dest[] â€" string na koji zelite da nadovezete string[]
string[] â€" string koji nadovezujete na dest[]
maxlength=sizeof string â€" duzina string[]
#13 funkcija, svima poznata je format. Ova funkcija formatira string po parametrima koje joj vi ponudite...
Format(string[], len, formatirani string, parametri)
string[] â€" string koji zelite da formatirate
len â€" duzina string[]-a
formatirani string â€" rezultat formatiranja
parametri â€" ovde unosite varijable koje zelita se ispisu u string â€" u
%c Ubacuje samo jedan znak/slovo.
%d Ubacuje neki broj/integer.
%f Ubacuje racionalni broj/float.
%i Isto kao i %d.
%s Ubacuje niz znakova(string/slog).
%x Ubacuje broj u heksadecimalnom format.
%% Ubacuje znak postotka ‘%’[/li][/list]
E to bi bilo to sto se tice objasnjavanja, preostaju samo jos primjeri... Nadam se da ste do sada nesto shvatili...
Primjeri:
#1
YCMD:provjeri(playerid, params[], help)
{
#pragma unused help
new ime[MAX_PLAYER_NAME];
GetPlayerName(playerid, ime, sizeof ime);
new unos[24];
if(!sscanf(params, "s[24]", unos))
{
if(strcmp(unos, ime, true) == 0)
{
SCM(playerid, -1, "Pogodio si ime!");
}
else return SCM(playerid, -1, "Nazalost pogrijesio si ime!");
}
return 1;
}
#2
YCMD:provjeri(playerid, params[], help)
{
#pragma unused help
new string[128];
GetPlayerName(playerid, ime, sizeof ime);
new unos[64];
format(string, sizeof string, "Pronadji me!");
if(!sscanf(params, "s[64]", unos))
{
if(strfind(unos, string, true) != -1)
{
SCM(playerid, -1, "Pronasao si slovo!");// ako unese npr. pro - ispisace ovu poruku...
}
else return SCM(playerid, -1, "Nazalost pogrijesio si ime!");
}
return 1;
}
#3
new string[16] = "Ostat ce samo A";
strdel(string, 0, 14); // string je sada "A"
#4
strins("Ubacit cemo ", "rijec", 32);
//string je sada "Ubacit cemo rijec!"
#5
new duzina;
new string[15];
format(string, sizeof string, “Ovo je stringâ€);
duzina = strval(string);
printf(“Duzina stringa je %iâ€, duzina); // izbacit ce broj 13...
#6
new PerPlayer[MAX_PLAYERS][64];
new string[24] = “Ubacit cemo ovo u stringâ€;
strmid(PerPlayer[playerid], string, 0, strlen(string), 255);
#7
new string[24];
strpack(string, “Ovo cemo upakovati!â€);
#8
new string[24];
new upakovani[24 char]= !â€Ispakovacemo ovo!â€);
srunpack(string, pstring);
#9
new string[24];
new vrijednost = 50;
valstr(string, vrijednost);
#10
new string[24] = “15.500604â€;
new floatvrijednost = floatstr(string);
#11
new string[24] = “5000058â€;
new integer = strval(string);
#12
new string[64];
strcat(string, “aâ€); strcat(string, “bâ€); strcat(string, “câ€); strcat(string, “dâ€);
print(string); // printat ce “abcdâ€;
#13
Mislim da ovu svi znate, pa nema potrebe za objasnjavanjem...
Eto to bi bilo to sto se tice ovoga tut-a, ako vam nesto nije jasno ili
zelite da saznate vise, slobodno se obratite za pomoc u ovoj temi...
Vecina ovih funkcija je dostupna u standardnom C/C++ programskom
okruzenju.
(Moguce su pravopisne i gramaticke greske u ovome tekstu)
strcmp - "najkompliciranija", "iako slabo tko zna sta ona zapravo radi" ? :D
strfind - "mada se izbjegava iz opravdanih razloga" ?
kakve trave ti pusis daj mi reci :D
mislim da za vecinu ako se procita ime i argumenti se zna sta radi, a ti tu plasis ko da su ne znam sta, joj joj, nije dobro se drogirat ;)
Citat: Omega-300 poslato Jul 05, 2011, 18:34:52 POSLE PODNE
strcmp - "najkompliciranija", "iako slabo tko zna sta ona zapravo radi" ? :D
strfind - "mada se izbjegava iz opravdanih razloga" ?
kakve trave ti pusis daj mi reci :D
mislim da za vecinu ako se procita ime i argumenti se zna sta radi, a ti tu plasis ko da su ne znam sta, joj joj, nije dobro se drogirat ;)
Hajde ako si ti neki genijalac objasni nesto iz pawn library-a...
Mogu se kladiti da pojma nemas...
Prije svega, jako lijep tutorial siguran sam da će koristiti nekima. Svaka Äast na trudu. - Iako me puno nasmijalo neka tvoja miÅ¡ljenja o npr. 'strfind' da se izbjegava ( hehehe )
Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
bool:ignorecase - E ovo je ono sto vecinu zbunjuje, a sama rijec kaze: "ignorecase", ako stavite true vrijedit ce:
ignorecase - ne kaže sama rijeÄ, jednostavnije to je on/off gumb strcmp komande.
Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
funkcija, jedna od najpopularnijih je strval. Veoma jednostavna, pretvara string u integer. Obrnuto od valstr.
TakoÄ'er, pretavaranje integer u float je isto jako važno, to radi ova naredba: http://wiki.sa-mp.com/wiki/Floatround
Iako nije samo za to, ali izmeÄ'u ostalog.
Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
funkcija, svima poznata je format. Ova funkcija formatira string po parametrima koje joj vi ponudite...
format nije funkcija. Tj. jest jedna vrsta funkcije. ima 'optional'
Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
%i Isto kao i %d.
Heh, donekle toÄno ali nije isto. %i formatira integer u 'pokretu' dok je %d stalni integer
Citat: EM|Pacino poslato Jul 05, 2011, 18:09:40 POSLE PODNE
Vecina ovih funkcija je dostupna u standardnom C/C++ programskom okruzenju.
Vidim da u svakom svom radu koji objaviÅ¡ poÄneÅ¡ neÅ¡to sa C/C++ ajde mi sada reci kakve veze to ima sa ovom temom? :S
- Mislim nemam ništa protiv ali samo zbunjuješ one koji se ne razumiju ni u PAWN, a kamoli u C/C++ ako se toliko voliš hvaliti ili se želiš dokazati sa tim C/C++ onda napravi neki plugin, a ne samo filozofirati da ispadne da se razumiješ.
Citat: Omega-300 poslato Jul 06, 2011, 12:17:47 POSLE PODNE
Ja sam Bullet, Joe Bullet, tako da mi nemoj srat.
Bullet pusti, nemoj se svaÄ'ati. Jednostavno se želi dokazati.
A Pacino mislim da Bulletu nemaš šta posebno govoriti jer je on u Dev. Timu sa Yless-om, zajedno rade YSI tako da to sve objašnjava.
Nemoj neke gluposti nego neki pošten plugin, mislim da svatko zna napraviti neku glupost u plugin-u. Nego napravi npr. Facebook chat za SA:MP da se mozes preko FB-a spojit nes kao IRC
Citat: [H]265 poslato Jul 06, 2011, 12:56:15 POSLE PODNE
Nemoj neke [cenzura]osti nego neki pošten plugin, mislim da svatko zna napraviti neku [cenzura]ost u plugin-u. Nego napravi npr. Facebook chat za SA:MP da se mozes preko FB-a spojit nes kao IRC
Hajd ok, pokusat cu to srediti :D
btw. Otisli smo offtopic skroz xD