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.