HIK Elektronikus Felsőoktatási Tankönyv- és Szakkönyvtár
A Kempelen Farkas Felsőoktatási Digitális Tankönyvtár/vagy más megjelenítő által közvetített digitális tartalmat a felhasználó a szerzői jogról szóló 1999. évi LXXVI. tv. 33. paragrafus (4) bekezdésében meghatározott oktatási, illetve tudományos kutatási célra használhatja fel. A felhasználó a digitális tartalmat képernyőn megjelenítheti, letöltheti, arról elektronikus adathordozóra vagy papíralapon másolatot készíthet, adatrögzítő rendszerében tárolhatja. A Kempelen Farkas Felsőoktatási Digitális Tankönyvtár/vagy más megjelenítő weblapján található digitális tartalmak üzletszerû felhasználása tilos, valamint kizárt a digitális tartalom módosítása és átdolgozása, illetve az ilyen módon keletkezett származékos anyag további felhasználása.

11.2. A string-ek mint vektorok

A stringek kezelhetőek vektorként is. Hivatkozhatunk rájuk elemenként, mint a karaktereket tartalmazó tömbökre.

string s=”123456789”;

for (i=0;i<s.Length;i++)

{

Console.WriteLine("{0}",s[i]);

}

A fenti példában a string Length tulajdonságával hivatkoztunk a hosszára, majd a ciklus magjában mindig az aktuális elemet írattuk ki a képernyőre. A hossz tulajdonság a string-ben szereplő karakterek számát adja vissza. A 0. az első, a length-1. az utolsó elem indexe. Amennyiben a for ciklusban egyenlőség is szerepelne (i<=s.Length) a ciklus végén hibaüzenetet kapnánk, mivel az s-nek elfogytak az elemei. Ezt túlindexelésnek nevezzük. (Gyakori hiba kezdő programozóknál – ne kövessük el!)

Az s string i. eleme, vagyis az aktuális indexelt elem karakter típus, mivel karakterek sorozatából épül fel, vagyis az s[i], a string egy eleme karakter. Ezt a következő példán keresztül be is láthatjuk.

Az s=s[1]; értékadó utasítás eredménye a következő hibaüzenet jelenik meg:

Cannot implicitly convert type 'char' to 'string',

Vagyis a két típus nem kompatibilis. Az értékadás akkor válik helyessé, ha az s[1] elemet konvertáljuk string-gé.

s=s[1].ToString();

Ennél az értékadásnál már nem kapunk hibaüzenetet. Az értékadás eredménye az s 1-es indexű eleme.

Annak ellenére, hogy a string-ek elemenként is olvashatóak, az ilyen típusú műveletek kellő körültekintést igényelnek. Az értékadásoknál inkább használjuk a típus megfelelő beszúró rutinját.

A string-ekbe ún.: rész string-eket szúrhatunk be az Insert() metódus segítségével. A paraméter listának tartalmaznia kell az indexet, ahova szeretnénk beszúrni, és a karaktert, vagy a karakterláncot. A következő példa bemutatja az Insert() metódus használatát.

s=”123456”

s=s.Insert(2,"ABCD");

A fenti programrészlet eredményeként az s változó tartalma az alábbi érték lesz:

”12ABCD3456”

A következő példa megmutatja, hogyan tudunk tetszőleges szöveget a felhasználó által megadott kulcs segítségével titkosítani. A titkosításhoz a XOR (kizáró-vagy) operátort használjuk fel. (Amennyiben a titkosított szöveget egy változóban tároljuk, a XOR újbóli alkalmazásával a string eredeti állapotát kapjuk vissza.) A C# nyelvben a XOR műveletet a ^ karakter jelenti, működése megegyezik a matematikai logikából ismert kizáró-vagy operátorral. (A titkosításhoz és a visszafejtéshez érdemes függvényt készíteni.)

using System;

namespace ConsoleApplication4

{

class Class1

{

[STAThread]

static void Main(string[] args)

{

string s;

int key;

int i;

Console.WriteLine("Gépelje ide a

titkosítandó szöveget : ");

s=Console.ReadLine();

Console.WriteLine("Adja meg a titkosítás kulcsát (numerikus adat): ");

key=Convert.ToInt32(Console.ReadLine());

for (i=0;i<s.Length;i++)

{

Console.Write((char)(s[i]^key));

}

Console.ReadLine();

}

}

}

A program kimenete a következő képen látható:

A for ciklus kiíró utasításában a beolvasott szöveget alakítjuk át úgy, hogy minden karakterét kizáró-vagy kapcsolatba hozzuk a felhasználótól kapott kulccsal. Ez által az eredeti szövegből egy matematikai úton titkosított szöveget kapunk, melyet az eredeti kulcs ismerete nélkül nem lehet visszaállítani. (Természetesen a titkosított szöveg visszafejtése lehetséges, számos módszer létezik rá, pl.: karakter statisztikák, kódfejtő algoritmusok, matematikus ismerősök .)

A titkosítás eredményét az egyszerűség kedvéért nem tároltuk, csak kiírtuk a képernyőre. A Kiíró utasításban ún.: típus-kényszerítést alkalmaztunk, mivel a XOR eredményeként kapott érték nem karakter, hanem numerikus adat.

Console.Write((char)(s[i]^key));

Ezzel a megoldással értük el, hogy a képernyőn nem az adott karakter kódja, hanem maga a karakter látható.

A string típus szinte minden komolyabb programban előfordul, különösképpen igaz ez a fájlkezelő programokra. Természetesen a string-ek használatának még rengeteg finomsága létezik. Használhatjuk őket számrendszerek közti átváltások eredményének tárolására, olyan nagy számok összeadására, szorzására, melyekhez nem találunk megfelelő ”méretű” változókat.

Sajnos nem minden programozási nyelv tartalmazza a string típust, és nagyon kevés olyan nyelv van, melyben osztályként használhatjuk, de ahol megtaláljuk (ilyen a C# nyelv), éljünk vele, mert megkönnyíti és meggyorsítja a programozást.