Vezérlőpult
B4. char és string alapok · Változók és típusok

B blokk · Változók és típusok · 4. tananyag

char és string alapok

A felhasználóval szöveggel beszélünk: üzenetek, nevek, menük — a Mastermind táblája is szöveg lesz. Ma törlesztünk két adósságot is: az A6-os idézőjel-rejtély megoldását (escape), és a régóta ígért string-interpolációt.

2 tanóraEscape és interpoláció

Tanulási célok

1A char — egyetlen karakter

A char pontosan egy karaktert tárol, aposztrófok között (B1):

char monogram = 'A';
char szamjegy = '7';      // ez KARAKTER, nem szám!
char szokoz = ' ';        // a szóköz is karakter

A motorháztető alatt a char valójában szám: minden karakternek kódja van a Unicode táblázatban — az 'A' a 65-ös, az 'a' a 97-es, a '0' a 48-as. Ezért tud a gép betűket rendezni és összehasonlítani. A kódokat a B6-os konverziókkal fogjuk majd kiolvasni; most elég a kép: a char egy szám, ami karakternek öltözött.

2A string — karakterek sorozata

A string akárhány karakter sorozata, idézőjelek között:

string nev = "Anna";
string ures = "";              // üres szöveg — 0 karakter, de létező érték
string mondat = "Szia, világ!";
"SZIA!" — ÖT KARAKTER SORBAN S z i a ! 0 1 2 3 4 Length = 5 · a halvány sorszámokkal (indexekkel) az I. blokkban dolgozunk majd
A string karakterdobozok sora — a Length megmondja, hány doboz van.

A string a legbeszédesebb bizonyítéka a „minden objektum” szálnak (A3): még a literálnak is vannak képességei. A leghasznosabb a Length — a karakterek száma:

string nev = "Anna";
Console.WriteLine(nev.Length);      // 4
Console.WriteLine("C#".Length);     // 2  — ismerős az A3.4 feladatból?
ℹ️ ELŐZETES

A Length mögött nem metódus áll (nincs zárójel!), hanem tulajdonság (property) — a különbséget a H blokkban tanuljuk. A string további képességei (keresés, darabolás, indexelés) az I. blokk témái.

3Összefűzés a + jellel (konkatenáció)

A + szövegek között összefűzést jelent:

string keresztnev = "Anna";
string udvozles = "Szia, " + keresztnev + "!";
Console.WriteLine(udvozles);        // Szia, Anna!

Ha a + egyik oldala string, a másik oldal — akár szám is — szöveggé válik:

int pont = 87;
Console.WriteLine("Pontszám: " + pont);   // Pontszám: 87

A két klasszikus csapda

Console.WriteLine("1" + 2);         // 12   — a "1" szöveg, a 2 hozzáfűződik!
Console.WriteLine(1 + 2 + " db");   // 3 db — balról jobbra: előbb 1+2=3
Console.WriteLine("db: " + 1 + 2);  // db: 12 — itt viszont már szövegként!

A szabály (a B3-ból ismerős balról-jobbra): a + mindig a két aktuális operandusát nézi. Amint az egyik string, onnantól minden fűzés.

4Escape-karakterek — a láthatatlan és a tiltott jelek

Hogyan írsz a stringbe sortörést? Vagy éppen idézőjelet — hiszen az lezárná a literált (A6, A9)? A megoldás a visszaper (\): a mögötte álló karakter különleges jelentést kap:

EscapeJelentésePélda
\núj sor (sortörés)"első\nmásodik"
\ttabulátor"Név:\tAnna"
\"idézőjel a stringben"Ő azt mondta: \"szia\""
\\maga a visszaper"C:\\temp\\uj"
\'aposztróf (char-ban kell)char c = '\'';
Console.WriteLine("Első sor\nMásodik sor");
Console.WriteLine("Név:\tAnna\nPont:\t87");
Console.WriteLine("Ő azt mondta: \"szia\"");   // az A6-os rejtély megoldva!

A verbatim string: @"…"

Windows-útvonalaknál a sok \\ fárasztó — és veszélyes is: a "C:\temp"-ben a \t tabulátorrá válik! A @ előtag kikapcsolja az escape-értelmezést:

string rossz = "C:\temp\uj";        // ⛔ a \t tab lenne, a \u pedig hiba (CS1009)!
string jo1 = "C:\\temp\\uj";        // ✔ escape-elve
string jo2 = @"C:\temp\uj";         // ✔ verbatim — a \ itt csak egy \
ℹ️ JÓ TUDNI

Az A9-ben láttad: a Visual Studio a string közepén ütött Entert +-os összefűzéssé alakítja. Most már a másik irányt is érted: ha a kiírt szövegBE kell sortörés, az nem Enter, hanem \n.

Fordul vagy nem?

Döntsd el mindegyik sorról: lefordulna-e így?

1 / 8Pontszám: 0
…

5String-interpoláció

A +-os fűzés hosszú szövegnél nehezen olvasható. A string-interpoláció ($"…") ugyanazt tudja, csak elegánsabban — ahogy a B1 és a B3 fejezetek ígérték: a $ jeles literálban a kapcsos zárójelek közé kifejezést írhatsz, és az értéke a szövegbe kerül:

string nev = "Anna";
int pont = 87;

Console.WriteLine($"Szia, {nev}! Pontszámod: {pont}.");
// Szia, Anna! Pontszámod: 87.

A kapcsos zárójelben bármilyen kifejezés állhat — számítás is:

int db = 3;
decimal ar = 899.50m;

Console.WriteLine($"{db} db × {ar} Ft = {db * ar} Ft");
// 3 db × 899.50 Ft = 2698.50 Ft

Két apróság:

Interpoláció vagy konkatenáció?

+ (konkatenáció)$"…" (interpoláció)
rövid fűzés (2 darab)rendbenrendben
több változó, mondatszerű szövegnehezen olvashatóezt válaszd
a VS tördeli a hosszú literált (A9)ezt használja—

Ökölszabály: alapértelmezésben interpolálj — a kódot olvasó ember (A9!) egyben látja a mondatot. (A számok formázása — pl. két tizedesjegy — a B5 témája lesz.)

6Gyakori hibák

TünetMi történt?Mit tegyél?
CS1009: Unrecognized escape sequence"C:\uj" — a \u nem érvényes escape\\ vagy @"…"
A \t helyén tabulátor jelent meg az útvonalbana "C:\temp" \t-je escape-ként értelmeződöttverbatim: @"C:\temp"
CS1012: Too many characters in character literalchar c = 'AB'; — a char csak EGY karakterha több kell: string
CS0029 string és char keverésénélchar c = "A"; vagy string s = 'A';idézőjel = string, aposztróf = char (B1!)
A kimenetben {nev} jelenik meg kapcsostullemaradt a $ az idézőjel elől$"…{nev}…"
"1" + 2 eredménye 12a + string mellett fűz, nem összeadelőbb számolj zárójelben, vagy külön változóban

7Gyakorlat — névjegy 2.0

  1. Új projekt: Console App, név: Szovegek, .NET 10.
  2. Vedd elő az A6-os névjegy ötletét, és írd meg egyetlen interpolált, többsoros kiírással:
string nev = "Kiss Anna";
string osztaly = "11.I";
int eletkor = 17;

Console.WriteLine($"Név:\t\t{nev}\nOsztály:\t{osztaly}\nÉletkor:\t{eletkor} év");
  1. Figyeld meg: a \t-k oszlopba igazítanak, a \n-ek sort törnek — egyetlen WriteLine-ból többsoros, rendezett kimenet lett.
  2. Escape-labor: írd ki a gyakorlófájlod útvonalát háromféleképpen — escape-elve (\\), verbatimmal (@), és próbáld ki szándékosan rosszul is ("C:\uj") — nézd meg a CS1009-et az Error Listben.
  3. Csapda-kísérlet: írasd ki és jósold meg előre (A9: fejben futtatás!): "1" + 2 · 1 + 2 + " db" · "db: " + 1 + 2
  4. Írj „blokk-sort” interpolációval: db, egysegAr (decimal!) változókból: 3 db × 899.50 Ft = 2698.50 Ft.
  5. Commitold (Szovegkezeles alapok gyakorlat).
✅ ELLENŐRZŐ PONT

A névjegyed oszlopba igazítva, több sorban jelenik meg egyetlen WriteLine-ból; láttad a CS1009-et; a csapda-kísérlet mindhárom eredményét előre eltaláltad.

8Feladatok

Gyakorló feladatok

⭐ alap · ⭐⭐ haladó · ⭐⭐⭐ kihívás

B4.1⭐

Deklarálj egy char-t és egy egykarakteres string-et. Írd le egy mondatban a különbséget — jelölésben és típusban.

B4.2⭐

Mit ír ki? Előbb papíron!

Console.WriteLine("Alma\tKörte\nSzilva");
Console.WriteLine("A \"C#\" szó 2 jelből áll.");
Console.WriteLine("2" + 2 + 2);
B4.3⭐⭐

Írd át +-os fűzésről interpolációra:

Console.WriteLine("A(z) " + termek + " ára " + ar + " Ft, készleten: " + db + " db.");

Miért lett olvashatóbb?

B4.4⭐⭐

Készíts „ASCII-táblázatot” escape-ekkel: három termék neve és ára, \t-kkel oszlopba igazítva, fejlécsorral. (Egy-egy hosszú név miatt szétcsúszhat a táblázatod — a szép igazítás igazi eszközeit az I. blokkban kapod meg.)

B4.5⭐⭐⭐

A nev.Length segítségével írasd ki: Anna nevének hossza: 4. Aztán trükközz: mit ad a "".Length? És a " ".Length? Mit mond ez az üres és a szóközös string különbségéről? (Az A3.4-ben a sharplabon már láttad a "C#".Length-et — most már a saját gépeden a saját változóiddal megy.)

9Önellenőrző kvíz

Ellenőrizd magad!

Minden kérdésnél egy válasz helyes. A végén pontszámot kapsz.

10Fogalomtár

FogalomJelentés
charegyetlen karakter, aposztrófok között — a háttérben Unicode-kód (szám)
Unicodea karakterek nemzetközi kódtáblája: minden jelnek száma van ('A' = 65)
stringkarakterek sorozata, idézőjelek között
üres string ("")0 karakter hosszú, de létező szöveg
Lengtha string karaktereinek száma — az első tulajdonság (property), amit használsz
konkatenáció (+)szövegek összefűzése; string mellett a szám is szöveggé válik
escape-karakter\ + jel: különleges jelentés (\n sor, \t tab, \" idézőjel, \\ visszaper)
verbatim string (@"…")a \ benne nem escape — Windows-útvonalakhoz
string-interpoláció ($"…")a {kifejezés} értéke a szövegbe kerül — az olvasható fűzés

11Összegzés

  1. A char egy karakter (aposztróf), a háttérben Unicode-szám; a string karakterek sorozata (idézőjel) — a Length megmondja, hány.
  2. A + string mellett fűz: a szám szöveggé válik. Balról jobbra — 1 + 2 + " db" → 3 db, de "db: " + 1 + 2 → db: 12.
  3. Az escape a láthatatlan és tiltott jelek nyelve: \n, \t, \", \\ — az A6-os idézőjel-rejtély ezzel oldódott meg.
  4. Útvonalakhoz verbatim: @"C:\temp" — a \ benne csak egy \.
  5. Interpolálj alapból: $"Szia, {nev}!" — kifejezés is állhat a kapcsosban, és a kód olvashatóbb. A $ az idézőjel ELŐTT áll. (Számformázás: B5.)