C# karakterek, Stringek

10. osztály 10évf_c# C# programozás Programozás

A karakter egyetlen betűt, számjegyet, írásjelet, grafikus jelet tartalmaz. Legegyszerűbb adattípusa a char. Ez 1 bájton tárolja az adott karakter ascii kódját.

Forrás: c# dokumentáció

Mi a string (karakterlánc)? Röviden: karakterek tárolására alkalmas típus. Hosszabban: A string nem csak egy típus, hanem osztály is. Megnézzük, milyen műveleteket végezhetünk vele. Eddig használtuk a .Length és a ToString()-et.

A teljes dokumentációja a Microsoft oldalán elérhető.

String deklarációja
string a; //ekkor csak létrehoztuk, de még nincs értéke
Ha metódusban hozzuk így létre a stringet, figyelnünk kell arra, hogy használat előtt értéket rendeljünk hozzá. Ha ezt nem tesszük fordítási hibát kapunk.
Értéket az alább módokon rendelhetünk hozzá:
a=”abc”;  //Ez az „a” stringhez beállítja az „abc” szöveget
a=null; //Az „a” stringhez egy null referenciát rendeltünk.
Ilyenkor az „a”-ra hivatkozás esetén vigyáznunk kell, könnyen kaphatunk egy NullReferenceException kivételt.
a=””; Üres stringet hoztunk létre.
Az üres string és a null referencia nem egyezik meg, üres string esetén, létrejön egy string objektum, melynek hossza nulla. Null referencia esetén viszont a memóriában nem foglaltunk helyet az objektumnak.

Konkatenálás 

A stringeket össze lehet fűzni:
String b = a + „abc”;
String c = String.Concat(a,b);
string s=”alma”; s = s+”fa”; //s értéke almafa lesz

String hosszának lekérdezése:  Length

string s=”informatika”; esetén int i= s.Length; // i értéke 11 lesz
A karakterszámba beleszámítódnak a szóköz jelek, valamint minden nem ABC-beli betű is!

String egy részének másolása: SubString() 

Pl. string s=”almafa”; esetén string m=s.SubString(2,3); jelentése: vedd az s változóban lévő string második karakteréről kezdődő 3 karakter hosszú szakaszt. Ehhez tudnunk kell, hogy a karakterek sorszámozása a string belsejében 0-val kezdődik, vagyis a=0, l=1, m=2, a=3, f=4, a=5 sorszámmal szerepel. Így a szóban forgó szövegrész az ”maf” karaktersorozat, ez kerül az m változóba. Ha olyan szakaszra hivatkozunk, ami nem létezik, akkor hibát kapunk. Ha csak egyetlen paramétert adunk meg a SubString() esetén, akkor azt jelenti, hogy a megadott pozíciótól minden további hátralévő karaktert le kell vágni. Tehát az m=s.SubString(3); esetén az m értéke ”afa” lesz.

String egy részének törlése: Remove()

A Remove() függvény segítségével karaktereket törölhetünk.

string szo=”valami”;
nyissz = szo.Remove(0,1); // -> alami Levágta az első karaktert

Karakterlánc beszúrása: Insert()

A string egy tetszőleges helyre beszúrhatunk folytonosan egy másik karakterláncot. A megadott helytől kezdve az eredeti karakterek jobbra csúsznak, és a felaszabadult helyre szúrja be az új részt.
pl: string szo = „valami”;
string teszt = szo.Insert(5,”amerika”); // -> valamiamerika lesz az eredmény

Karakter cseréje: Replace()

A String.Replace() metódus lecserél egy karaktert vagy egy karakterláncot egy másik karakterrel vagy karakterlánccal a stringben.
A C#-ban a stringek megváltoztathatatlanok. Ez azt jelenti, hogy a metódus nem helyettesíti a karaktereket vagy a karakterláncokat egy karakterláncból. A metódus új stringet hoz létre és ad vissza új karakterekkel vagy karakterláncokkal.

Levágás: Trim(), TrimStart(), TrimEnd()

Paraméterek nélkül a Trim() levágja a szóközöket a szöveg elejéről és végéről, a TrimStart() csak az elejéről, a TrimEnd() csak a végéről. Ha adunk neki paramétert, például egy a betűt, akkor ugyanazt csinálja, mint a szóközzel.

String nagybetűssé alakítása: ToUpper()
string s=”valami „string m=s.ToUpper(); //m értéke VALAMI

String kisbetűssé alakítása: ToLower()
string s=”VaLaMi „string m=s.ToLower(); //m értéke valami

Stringek karakterenkénti olvasása

A string egy karaktersorozat, melynek elemei (karakterei) be vannak sorszámozva, 0-val kezdődően. A string egy elemét el tudjuk érni az indexével (sorszámával).
string s = ”informatika”; esetén a char c = s[3]; //c értéke o lesz

Stringek kezdetének vizsgálata: StartsWith()

A string elejét meg tudjuk vizsgálni a StartsWith () metódussal.
string s=”informatika”; esetén például if (s.StartsWith(”info”)) …
A StartsWith() logikai igaz vagy hamis értéket ad vissza attól függően, hogy a string tényleg a megadott karaktersorozattal kezdődik-e. Ezen vizsgálat kisbetű-nagybetű érzékeny.

Stringek végének vizsgálata: EndsWith()

A string végét meg tudjuk vizsgálni a EndsWith () metódussal.
string s=”informatika”; esetén például if (s.EndsWith(”matika”)) …
Az EndsWith() logikai igaz vagy hamis értéket ad vissza attól függően, hogy a string tényleg a megadott karaktersorozattal végződik-e. Ezen vizsgálat kisbetű-nagybetű érzékeny.

Szöveg igazítása: PadLeft() és PadRight()

A PadLeft() segítségével megadhatjuk, hol legyen a szöveg vége! (tulajdonképpen jobb oldali margója) Az előtte levő üres helyet szóközzel, vagy a megadott karatkerrel kitölti. A PadRight() segítségével megadhatjuk hol legyen a szöveg jobb oldala, ebben az esetben a szöveg előtti üres helyet tölti ki szóközzel, vagy a megadott karakterrel.

Stringek összehasonlítása
Két string egyenlő akkor és csak akkor, ha hosszuk egyenlő, és minden karaktere rendre egyenlő. Két karakter egyenlő, ha mindkét karakternek egyforma a kódtábla szerinti kódja. A teljes stringre csak az == vagy != relációs jelek értelmezhetők! Azonban van kiskapu: CompareTo. Segítségével a teljes stringnél is működik a <,>. Abc sorrend szerint hasonlít.

A C# string.Equals függvény két string összehasonlítására szolgál. Az összehasonlítás eredménye egy logikai érték (true vagy false), amely megmutatja, hogy a két string egyenlő-e vagy sem.

StringComparison.Ordinal: Sorszám szerinti összehasonlítás, amely a karakterek Unicode kódja alapján történik. Ez a leggyorsabb összehasonlítási típus, de nem veszi figyelembe a lokációt, és a kis- és nagybetűket.
StringComparison.OrdinalIgnoreCase: Unicode kód szerinti összehasonlítás, amely figyelmen kívül hagyja a kis- és nagybetűket.
StringComparison.CurrentCulture
StringComparison.InvariantCulture

IndexOf() Karaktert vagy karakterláncot keres a megadott stringben. A függvény értéke 0 és pozitív vagy -1 lehet, attól függően, megtalálta-e a keresett értéket. -1 ha nem, 0 vagy pozitív esetén a keresett érték helyét jelzi a stringben.

Keresés: IndexOf()

pl: szöveg=”informatika” szó=”matika”
szöveg.IndexOf(szó)=4

Formázás

Alapvetően ha megadjuk fixen, mennyi tizedesjegyet írjon, és nincs annyi, akkor nulákkal kipótolja. A nagybetű a formátum kód, a kisbetű pedig a tizedesjegyek száma:

  • C, c (Pénz)
    Pénz formátum kód, minden szám típussal működik. A területi és nyelvi beállítások határozzák meg.
    pl: Console.WriteLine(„Pénz: {0:C1}”, 1000);
  • D, d (Decimális)
    Egész szám típusokon használható formátum jelölő.
  • E, e (Exponenciális)
    A számokat hatvány alakban írja ki.
  • F, f (Fixpontos)
    Fixpontos szám formátum.
  • G, g (Általános)
    Általános szám. Exponenciális, Fixpontos, vagy Decimális megjelenítést alkalmaz.
  • N, n (Szám)
    Szám formátum, ami minden szám típuson alkalmazható.
  • P, p (Százalék)
    Szám típusok esetén alkalmazható.
    pl: Console.WriteLine(„Százalék: {0:P3}”, 0.32456);
  • R, r (Round-Trip)
    Float és Double típusok esetén használható.
  • X, x (Hexa)
    Egész szám típusok esetén használható. A számot hexadecimális formában jeleníti meg.

Speciális karakterek

\t tabulátor
\n sortörés

Lassítás‘: using System.Threading majd Thread.Sleep(20)

Kód tördelése blokkokra: #region a blokk végére pedig: #endregion

Gyakorlás:

Vegyesen

Szó keresése Keressük meg, hogy egy megadott szövegben hányszor fordul elő egy megadott szó! A c# különbséget tesz kis és nagybetű között, ezzel most a példa nem foglalkozik. pl: keressük: eb Szöveg: Eb eb eB Találatok  száma:1 lesz. Átalakíthatjuk a keresés előtt az egész szöveget kisbetűssé, és akkor már meg fogja találni a szó összes előfordulását. pl: szoveg = szoveg.ToLower();

Szöveg megfordítása
Írjuk ki a bekért szöveget visszafelé! A szöveg csak kisbetűkből álljon!
Az első megoldás során for ciklussal végigmegyünk visszafelé a szövegen, és betűnként hozzáadjuk egy másik stringhez.

Egyszerűbb megoldás: alakítsuk a szöveget tömbbé, majd rendezzük visszafelé:

Színek használata a konzolos felületen

Lehetőségünk van a konzolos felületen a háttér és az előtér színét is megváltoztatni. A színekeet a ConsolColor-ral lehet megadni.

Kurzor pozíció beállítása

A kurzor helyét x és y koordináták segítségével lehet megadni. A kezdőpont a bal felső sarok.

Példa: rajzoljunk tele egy 10 sor x 10 oszlopnyi területet csilagokkal! A csillagok kiíratása balról jobbra, majd a következő sorban jobbról balra történjen!

Példa: a tanult metódusok alkalmazása

Példa: Kérjünk be egy telefonszámot (12 karakter hosszú, legyen benne +36)
Ha nem felel meg a formátumnak, akkor mindaddig ismételjük a bekérést, amíg jó nem lesz!
Ha megfelelő a formátuma, akkor nézzük meg, melyik szolgáltatóhoz tartozik a szám!

Példa: Replace használata. Cseréljük le egy szó első karakterét egy másik karakterre!
Replace(mit, mire cserélünk)
A replace képes egyszerre több karaktert is lecserélni, cseréljük le az ‘e’ betűket nagy ‘E’-re!

Példa: Contians() használata
Kérj be egy szöveget, és cseréld le az összes magángangzót e-re, avagy az eszperente feladat.
( A feladat megoldható úgy is, hogy a stringet a ToCharArray() függvénnyel karakterekből álló tömbbé konvertáljuk, és egy a magánhangzókat tartalmazó char tömb elemeihez hasonlítjuk, cseréljük. )

Példa: Nézzünk egy nehezebb feladatot! Ehhez már tudni kell az eljárások használatát is!
A program kérjen be a felhasználótól egy szót, majd generáljon a szó hosszával megegyező szavakat! Tulajdonképpen permutációt használunk.