Szerző Téma: String  (Megtekintve 746 alkalommal)

String
« Dátum: 2012. Augusztus 26. - 11:16:47 »
0 Show voters
Üdvözletem!
Van ez a string-es dolog. Igazából fogalmam sincs mi ez. El tudnátok mondani, mire jó, mikor használjuk, és még ha kell valamit tudni róla?
És még itt van ez:
 
new string[] //A kapcsos zárójelek közé mitõl függ hanyas számot írok, és mely számokat írhatom ide?
« Utoljára szerkesztve: 2012. Augusztus 26. - 15:10:41 írta Extasy449 »

Nem elérhető bendor

  • 2949
    • Profil megtekintése
String
« Válasz #1 Dátum: 2012. Augusztus 26. - 11:37:32 »
0 Show voters
Általában ezt a változót használjuk szövegformázásra,de lehet mást is.
Példa:
 

new string[200];
new pName[MAX_PLAYER_NAME];
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
GetPlayerName(playerid,pName,sizeof(pName));
format(string, sizeof(string),\"%s mondja: %s\", pName, text[1]);
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInRangeOfPoint(i, 7.0, x, y, z))
{
SendClientMessage(i, 0x33FF33AA, string);
}
}
}

String
« Válasz #2 Dátum: 2012. Augusztus 26. - 12:00:15 »
0 Show voters
Nagyon nem részletezem hány byte meg bit a lényeg hogy megértsd:
 
new karakterlanc[6];

 
Minden egyes cella megszámozva a következõképpen néz ki:
 

karakterlanc[0];
karakterlanc[1];
karakterlanc[2];
karakterlanc[3];
karakterlanc[4];
karakterlanc[5];

 
Látványban azt jelenti 6 darab ilyen változót hoztál létre, amit a [] jelek közt számokkal azonosítva meghívhatsz.
Ha ezt így írod le pawnban:
 
karakterlanc[6] = \"hello\";

 
vagy így
 
karakterlanc[] = \"hello\";

 
azzal gyakorlatilag ezt csináltad:
 

karakterlanc[0] = \'h\';
karakterlanc[1] = \'e\' ;
karakterlanc[2] = \'l\';
karakterlanc[3] = \'l\';
karakterlanc[4] = \'0\';
karakterlanc[5] = \'\\0\';

 
Röviden, minden egyes cella egyetlen egy karaktert tartalmaz.                                           (tömörítetlenül,<-ez késõbbi dolog egyelõre ne foglalkozz vele)
Természetesen szinte minden írásjelet képes tárolni egy ilyen cella, beleértve a számokat is lásd: http://www.asciitable.com/
Létrehozhatsz egy ilyen filterscriptet és lefuttatva, meglátod mit is csinál:
 
#include <a_samp>
public
OnFilterScriptInit()
{
new
str[] = \"hello\";
print(str);
printf(\"%c%c%c%c%c\", str[0], str[1], str[2], str[3], str[4]);
//***************
print(\"\\n\\n\");
strteszt();
//***************
print(\"\\n\\n\");
strteszt2();
//***************
return 1;
}
 
stock
strteszt()
{
new
str[6];
str = \"hello\";
print(str);
printf(\"%c%c%c%c%c\", str[0], str[1], str[2], str[3], str[4]);
}
stock
strteszt2()
{
new
str[6];
str[0] = \'h\';
str[1] = \'e\';
str[2] = \'l\';
str[3] = \'l\';
str[4] = \'0\';
str[5] = \'\\0\';
print(str);
printf(\"%c%c%c%c%c\", str[0], str[1], str[2], str[3], str[4]);
}

 
Ebbõl igazából azt lehet látni hogy többféleképpen használható az így létrehozott változó, de az eredmény ugyanaz.

String
« Válasz #3 Dátum: 2012. Augusztus 26. - 12:03:20 »
0 Show voters
Idézetet írta: ɐʞzssǝlosz date=1345975215\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"26886\" data-ipsquote-contentclass=\"forums_Topic
Nagyon nem részletezem hány byte meg bit a lényeg hogy megértsd:
 
new karakterlanc[6];

 
Minden egyes cella megszámozva a következõképpen néz ki:
 

karakterlanc[0];
karakterlanc[1];
karakterlanc[2];
karakterlanc[3];
karakterlanc[4];
karakterlanc[5];

 
Látványban azt jelenti 6 darab ilyen változót hoztál létre, amit a [] jelek közt számokkal azonosítva meghívhatsz.
Ha ezt így írod le pawnban:
 
karakterlanc[6] = \"hello\";

 
vagy így
 
karakterlanc[] = \"hello\";

 
azzal gyakorlatilag ezt csináltad:
 

karakterlanc[0] = \'h\';
karakterlanc[1] = \'e\' ;
karakterlanc[2] = \'l\';
karakterlanc[3] = \'l\';
karakterlanc[4] = \'0\';
karakterlanc[5] = \'\\0\';

 
Röviden, minden egyes cella egyetlen egy karaktert tartalmaz.                                           (tömörítetlenül,<-ez késõbbi dolog egyelõre ne foglalkozz vele)
Természetesen szinte minden írásjelet képes tárolni egy ilyen cella, beleértve a számokat is lásd: http://www.asciitable.com/
Létrehozhatsz egy ilyen filterscriptet és lefuttatva, meglátod mit is csinál:
 
#include <a_samp>
public
OnFilterScriptInit()
{
new
str[] = \"hello\";
print(str);
printf(\"%c%c%c%c%c\", str[0], str[1], str[2], str[3], str[4]);
//***************
print(\"\\n\\n\");
strteszt();
//***************
print(\"\\n\\n\");
strteszt2();
//***************
return 1;
}
 
stock
strteszt()
{
new
str[6];
str = \"hello\";
print(str);
printf(\"%c%c%c%c%c\", str[0], str[1], str[2], str[3], str[4]);
}
stock
strteszt2()
{
new
str[6];
str[0] = \'h\';
str[1] = \'e\';
str[2] = \'l\';
str[3] = \'l\';
str[4] = \'0\';
str[5] = \'\\0\';
print(str);
printf(\"%c%c%c%c%c\", str[0], str[1], str[2], str[3], str[4]);
}

 
Ebbõl igazából azt lehet látni hogy többféleképpen használható az így létrehozott változó, de az eredmény ugyanaz.
 
Ez olyan mint egy tutorial [mert az xd]
Miért nem írod ki TuT -nak? :D
Sztem érdemes, jó lett és érthetõ is.. :D
[bocs az offért :)]
Dexter

Nem elérhető Tomee

  • 385
    • Profil megtekintése
String
« Válasz #4 Dátum: 2012. Augusztus 26. - 12:06:35 »
0 Show voters
Ez most így fura, egy kérdés, ha már témánál vagyunk.
Ha beírjuk hogy
new string[];

 
Akkor úgy lesz, hogy ha írok valamit, akkor pont annyi karaktert fog használni, ami nekem kell? Lehet rosszul magyaráztam, de normálisan sose tudtam elmagyarázni semmit.

String
« Válasz #5 Dátum: 2012. Augusztus 26. - 13:18:57 »
0 Show voters
Köszönöm a gyors és érthetõ válaszokat!
 
Idézetet írta: Tomee date=1345975595\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"26886\" data-ipsquote-contentclass=\"forums_Topic
Ez most így fura, egy kérdés, ha már témánál vagyunk.
Ha beírjuk hogy
new string[];

 
Akkor úgy lesz, hogy ha írok valamit, akkor pont annyi karaktert fog használni, ami nekem kell? Lehet rosszul magyaráztam, de normálisan sose tudtam elmagyarázni semmit.
 
Ezt még én is kérdezném :D Lehet hogy amit beírsz értéknek, pl 200, maximum annyi karakternyi szöveg lehet?  :question:
« Utoljára szerkesztve: 2012. Augusztus 26. - 13:20:44 írta Extasy449 »

Nem elérhető JBauer

  • 1407
    • Profil megtekintése
String
« Válasz #6 Dátum: 2012. Augusztus 26. - 14:02:34 »
0 Show voters
Nem, amit beleírsz annál egyel kisebb, mert a végén ott lesz a \'\\0\' karakter.

String
« Válasz #7 Dátum: 2012. Augusztus 26. - 15:10:06 »
0 Show voters
Köszönöm! Zárom

String
« Válasz #8 Dátum: 2012. Augusztus 26. - 15:49:29 »
0 Show voters
        new
                str[] = \"hello\";

 
Ebben a formában a pawn fordító megállapítja mekkora méretnek kell benne lennie.
Ilyen kis szövegeknél se meddig nem tartana megszámolni mekkora méretet kell oda írni.
 
new str[] = \"De ha hosszabb karakterláncot alkalmazunk, már idõigényes megszámolni a karakterek számát, és nekünk megadni.\";

 
Ezt a feladatot veszi le a vállunkról a pawncc.exe.
Értéket akkor érdemes meghatározni, ha másvalamire is szeretnénk használni ezt a változót, az értéke általában jóval több mint a benne tárolt adat, de sosem lehet kevesebb annál, a fordító hibaüzenettel jelezni is fogja.
A 128-as érték igazából csak egy megszokott érték, ami a legtöbb helyen bõven elegendõ.
A ShowPlayerDialog-ban megjelenített üzenet már akár 4000-es méretet is megkívánhat.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal