Přejít na obsah

#3 Řetězec [**]

Pawn samp sa-mp řetězec string array new tutorial tut

  • Pokud chcete odpovědět, přihlaste se
3 odpovědí

#1
vEnd

vEnd

    Python maniac

  • Globální moderátor
  • Příspěvků: 682

Obtížnost: :2:

Osnova:
1. Úvod, co je řetězec
2. Nulový znak
3. Ukládání hodnot do řetězce
4. Závěr

1. Úvod
Zdravím Vás, dostali jsme se už ke třetímu návodu pro začínající pawnery. Ještě než se do toho pustíme, doporučuji, abyste si přečetli předchozí dva návody (návod na polenávod na proměnnou), zejména návod na pole, bez něj budete mít problémy pochopit problematiku řetězců.

O řetězci (angl. string) byla řeč již dříve. Zopakujeme si to hlavní – je to pole znaků, do kterého ukládáme texty, zprávy, hesla atd. Každá buňka obsahuje jeden znak. Do poslední buňky nic neukládáme. Proč vlastně do poslední buňky nic neukládáme? Kvůli nulovému znaku.

2. Nulový znak
Je načase, abychom si konečně vysvětlili, proč u řetězců potřebujeme buňku navíc, proč tuhle poslední buňku nikdy nezaplňujeme. Je to kvůli tzv. nulovému znaku (také EOS – End of String).

Tenhle konkrétní znak (mimochodem vypadá takhle – '\0') v Pawn totiž určuje konec řetězce. Jazyk po nás požaduje, abychom mu sdělili, když řetězec skončí. Proto je nezbytné k délce řetězce vždy přičíst jeden znak navíc, ten je vyhrazen pro tento nulový znak.

.

new pozdrav[4+1]; //deklarace řetězce, která je nám důvěrně známa z předchozího návodu na pole

pozdrav = "ahoj"; //uložení pozdravu do řetězce

.

Slovo "ahoj" má 4 znaky, celkem tedy potřebujeme řetězec o délce pěti znaků (4 + nulový znak). Abychom měli představu, jak to v tom řetězci vypadá, rozpitváme si ho:

.

pozdrav[0] = 'a'
pozdrav[1] = 'h'
pozdrav[2] = 'o'
pozdrav[3] = 'j'
pozdrav[4] = '\0' //onen nulový znak v páté buňce s indexem 4

.

Ať už potřebujeme řetězec k čemukoli, vždy musíme myslet na tento nulový znak. Pro příklad, pokud funkce SendClientMessage může odeslat zprávu o maximální délce 144 znaků, řetězec s touto zprávou musí mít délku 145.

3. Ukládání hodnot do řetězce
Existuje více způsobů, jak můžeme do řetězce něco uložit. Vlastně jich je spousta, my si ukážeme ty základní.

a) Přímé ukládání pomocí operátoru přiřazení
Tím mám na mysli rovnítko (=). Takhle jsme to dělali doposud, uvedeme identifikátor řetězce (bez hranatých závorek), rovnítko a poté text ohraničený uvozovkami (").

.

pozdrav = "ahoj";

.

Tento způsob ukládání lze použít, když přesně víme, co tam chceme uložit. Také je nutno podotknout, že ukládaný text nesmí být delší, než je délka řetězce. Upřímně si myslím, že s tímto se v praxi moc nepotkáte (akorát při inicializaci). Často je potřeba text upravit, dosadit do něj hodnoty proměnné apod. K těmto účelům nám slouží formátování.

 

b ) Formátování

Když formátujeme text, označujeme tím proces, při kterém do něj vkládáme hodnoty jiných proměnných a řetězců. Slouží nám k tomu funkce format.

.

format(output[], len, const format[], {Float,_}:...)

.

Za "output[]" dosadíme řetězec, kam chceme výsledný text uložit. Parametr "len" po nás chce délku výsledného textu. "const format[]" je onen text, který chceme formátovat. To poslední – "{Float,_}:..." – jsou proměnné/řetězce, které chceme dosadit.

 

Ukažme si to na příkladu:

.

new hrac[4+1] = "Pepa"; //takto vypadá inicializace řetězce
new penize = 500, score = 1000; //proměnné, které budeme dosazovat
new vysledek[100]; //výsledný řetězec, kde bude nás formátovaný text

format(vysledek, sizeof vysledek, "Hráč %s má %d dolarů a %d skóre.", hrac, penize, score);

.

V řetězci vysledek teď budeme mít:

Hráč Pepa má 500 dolarů a 1000 skóre.

.

Ve fomátované zprávě jsme použili jisté znaky – %s a %d. Těmto znakům se říká specifikátory. Aby ta funkce format věděla, kam má to hrac, penize a score dosadit, musíme mu to dát nějak vědět. To je účel specifikátorů. Uvádíme je vždy v tom pořadí, v jakém po sobě jdou proměnné/řetězce, které dosazujeme. Máme následující specifikátory:

 

%d nebo %i – celá čísla

%s – řetězec

%f – čísla s desetinnou čárkou

%c – znak

 

Nejsou všechny, ale jako základ nám tohle postačí.

 

4. Závěr

A to by k řetězcům bylo všechno. Konečně již víme, co je nulový znak a k čemu slouží. Už víme, jak do řetězců ukládat běžný, ale také formátovaný text. Jediné, na co jsem ještě zapomněl – pomocí sizeof jsme zjistili velikost řetězce vysledek (počet buněk toho řetězce).

 

Tento návod, stejně jako ten předchozí, je určen pro nováčky, pokročilejší věci byly buďto úplně vynechány, nebo jsou uvedeny ve spoilerech. Přesto, zdá-li se Vám, že jsem něco opomněl, někde jsem se spletl nebo se jen chcete vyjádřit, pište do tohoto tématu.

 

Ověřený návod

Tento návod prošel validací, a lze ho proto považovat za ověřený.


  • 3


I always enjoy meeting people more chemically imbalanced than myself. -Trevor Philips
It's hard to follow the train when you are hauling two number nines; a number nine large; a number six with extra dip; a number seven; two number 45s, one with cheese; and a large soda. -guess who


#2
Hip

Hip

    Maria Latore

  • Uživatel
  • Příspěvků: 2 588

Steam Profile

Krásná práce! 

Díky


  • 0

#3
ATomas

ATomas

    RZE for life, SP for ever !

  • Ověřený uživatel
  • Příspěvků: 2 818
  •   

Jen jeste jden trik :d Pokud inicializujes pole (string) pri definici, nemusis psat rozmer (ten urci obsah)

new hrac[5] = "Pepa";

lze napsat

new hrac[] = "Pepa";

Upraveno uživatelem ATomas: 12 červenec 2016 - 22:11:26

  • 0
play.superparba.eu:7777
www.superparba.eu
pawno.cz kazí dva typy lidí:
1. "Najdi do to na googlu/wiki" <- sakra tak od toho je tu ta sekce help ne ? Protože to asi nenašel / nepochopil / neví
2. Ovce. <- Člověk by se mohl smát kdyby to nebylo tak smutné jak tu někdo zavedl termín kid/děcko a všichni ho začali bezhlavě používat na každého, kdo se jenom opováží na něco zeptat nebo projevit svůj nazor.

#4
vEnd

vEnd

    Python maniac

  • Globální moderátor
  • Příspěvků: 682

To jsem neuvedl záměrně, chci, aby počítali s tím nulovým znakem a vždycky přičetli o jedno navíc, než je délka textu. Ale abys neřekl, že je to jen výmluva z mé strany, o dopočítání velikosti pole obecně jsem se zmiňoval v návodu na pole. :) Jinak díky za názory, jsem rád, když někdo něco napíše, cokoliv. Je to depresivní psát do větru. :d


  • 0

I always enjoy meeting people more chemically imbalanced than myself. -Trevor Philips
It's hard to follow the train when you are hauling two number nines; a number nine large; a number six with extra dip; a number seven; two number 45s, one with cheese; and a large soda. -guess who






Také označeno jedním nebo více klíčovými slovy: Návod, Pawn, samp, sa-mp, řetězec, string, array, new, tutorial, tut

0 uživatelů si prohlíží toto fórum

0 uživatelů, 0 návštěvníků 0 anonymních uživatelů

© 2015 IPS, Inc.

Zajímat Vás mohou ještě aktuální zprávy. sleviště, slevy dnes Herbalife je skvělou cestou pro dobré zdraví. Je libo dětský web?