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.
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 sztringet, 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” sztringhez 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 sztringet hoztunk létre.
Az üres sztring és a null referencia nem egyezik meg, üres sztring esetén, létrejön egy sztring 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ő sztring második karakteréről kezdődő 3 karakter hosszú szakaszt. Ehhez tudnunk kell, hogy a karakterek sorszámozása a sztring 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.
Sztring nagybetűssé alakítása: ToUpper()
string s=”valami „string m=s.ToUpper(); //m értéke VALAMI
Sztring kisbetűssé alakítása: ToLower()
string s=”VaLaMi „string m=s.ToLower(); //m értéke valami
Sztringek karakterenkénti olvasása
A sztring egy karaktersorozat, melynek elemei (karakterei) be vannak sorszámozva, 0-val kezdődően. A sztring 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
Sztringek kezdetének vizsgálata: StartsWith()
A sztring 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.
Sztringek végének vizsgálata: EndsWith()
A sztring 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.
Két sztring 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.
Keresés: 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.
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
string s = "Ez egy teszt szöveg ami néhány szóból áll.";
Console.WriteLine(s);
int hossz = s.Length;
Console.WriteLine("A szöveg hossza: {0}", hossz);
Console.WriteLine("Szöveg hossza: {0}",s.Length); //ha nem akarunk külön változót
int poz_v = s.IndexOf("t");//első t betű helye, 0-tól számozódik
Console.WriteLine("Az első t betű helye:" + poz_v);
int poz_x = s.IndexOf("q");//első q helye, 0-tól számozódik
Console.WriteLine("Az első q betű helye:" + poz_x);// -1, nincs a szövegben
int poz_utolso_a = s.LastIndexOf("a");//utolsó ”a” helye, 0-tól számozódik
Console.WriteLine("Az utolsó a betű helye:" + poz_utolso_a);
Console.WriteLine(s.Substring(0, 3));//első 3 karakter, 0.-tól 3 db
Console.WriteLine(s.Substring(11));//12. karaktertől
int poz = s.IndexOf(" ");
Console.WriteLine(s.Substring(0, poz));
Console.WriteLine(s.Substring(poz + 1));
Console.ReadKey();
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();
string szo, szoveg;
int db = 0, i = 1;
Console.WriteLine("Kérem a keresett szót: ");
szo = Console.ReadLine();
Console.WriteLine("Kérem a szöveget amiben keresünk: ");
szoveg = Console.ReadLine();
for (i = 0; i <= szoveg.Length - szo.Length; i++)
if (szoveg.Substring(i, szo.Length) == szo)
db++;
Console.WriteLine();
Console.WriteLine("{0} szóból {1} db van a szövegben", szo, db);
Console.ReadKey();
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.
string szoveg = "", forditott = "";
int i = 0;
Console.WriteLine("Szöveg: ");
szoveg = Console.ReadLine();
for (i = szoveg.Length - 1; i >= 0; i--)
forditott = forditott + szoveg[i];
Console.WriteLine("Visszafelé: ");
Console.WriteLine(forditott.ToLower());
Console.ReadKey();
Egyszerűbb megoldás: alakítsuk a szöveget tömbbé, majd rendezzük visszafelé:
Console.Write("Kérem, adjon meg egy szöveget: ");
string szoveg = Console.ReadLine();
char[] karakterek = szoveg.ToCharArray();
Array.Reverse(karakterek);
Console.WriteLine(new string(karakterek));
Console.ReadKey();
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.
//tiszta képernyő, letörli a tartalmat
Console.Clear();
//szövegszín legyen piros:
Console.ForegroundColor = ConsoleColor.Red;
//háttér színe legyen fehér:
Console.BackgroundColor = ConsoleColor.White;
//visszaállítás alaphelyzetbe:
Console.ResetColor();
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.
Console.SetCursorPosition(x, y);
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!
using System;
namespace csillagos
{
class Program
{
static void Main(string[] args)
{
for (int y = 0; y <= 10; y++)
{
for (int x = 0; x <= 10; x++)
{
if (y % 2 == 0)
{
Console.SetCursorPosition(x, y);
Console.Write("*");
}
else
{
Console.SetCursorPosition(10 - x, y);
Console.Write("*");
}
System.Threading.Thread.Sleep(2);
}
}
}
}
Példa: a tanult metódusok alkalmazása
using System;
namespace szept27_stringek
{
class Program
{
static void Main(string[] args)
{
string szo = "Ez egy string...";
Console.WriteLine(szo);
Console.WriteLine("hossza:{0}",szo.Length);
Console.WriteLine("első karaktere:{0}",szo[0]);
Console.WriteLine("utolsó karaktere:{0}",
szo[szo.Length-1]);
//Substring: index,hány karakter?
Console.WriteLine(szo.Substring(3,3));
//karakterek levágása, index hány karaktert vágjon
szo = szo.Remove(0,3);
Console.WriteLine(szo);
//karakterek beszúrása index, mit
szo = szo.Insert(0, " még ");
szo = szo.TrimStart(); //szóközök levágása az elejéről
szo = szo.ToUpper(); //NAGYBETŰS
Console.WriteLine(szo);
for (int i = 0; i < szo.Length; i++)
Console.WriteLine("{0}.elem: {1}", i, szo[i]);
string keres = "egy";
szo = szo.ToLower(); //kisbetűs
/*IndexOf - string keresése stringben. -1 esetén nincs*/
Console.WriteLine(szo.IndexOf(keres));
if (szo.IndexOf(keres) < 0)
Console.WriteLine("Nem található a keresett szó");
if (szo.IndexOf(keres) >= 0)
Console.WriteLine("Megtalálható a keresett szó");
}
}
}
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!
using System;
namespace okt01_tel
{
class Program
{
static void Main(string[] args)
{
string tsz = "";
//+36201234567
do
{
Console.WriteLine("Kérek egy telefonszámot!");
tsz = Console.ReadLine();
}
while (tsz.Length != 12 || tsz.Substring(0,3)!="+36");
if (tsz[3] == '2') Console.WriteLine("Telenor");
if (tsz[3] == '3') Console.WriteLine("Telekom");
if (tsz[3] == '7') Console.WriteLine("Vodafone");
}
}
}
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!
using System;
namespace stringcsere
{
class Program
{
static void Main(string[] args)
{
string szo = "november";
string teszt = "--------";
Console.WriteLine(szo);
Console.WriteLine(teszt);
teszt = szo.Replace(szo[0], 'N');
Console.WriteLine(teszt);
teszt = teszt.Replace('e','E');
Console.WriteLine(teszt);
}
}
}
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.
Console.Write("Kérem, írjon be egy szöveget: ");
string bemenet = Console.ReadLine();
string kimenet = "";
bemenet=bemenet.ToLower();
foreach (char c in bemenet)
{
if ("aáéiíoóuúüűöő".Contains(c))
{
kimenet += "e";
}
else
{
kimenet += c;
}
}
Console.WriteLine("Az eszperentéül írt szöveg: {0}",kimenet);
Console.ReadKey();
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.
using System;
class gyakorlas
{
/* Permutáció */
private static void permutacio(String bekert_szoveg, int kezdo_index, int veg_index)
{
if (kezdo_index == veg_index)
Console.WriteLine(bekert_szoveg);
else
{
for (int i = kezdo_index; i <= veg_index; i++)
{
bekert_szoveg = csere(bekert_szoveg, kezdo_index, i);
permutacio(bekert_szoveg, kezdo_index + 1, veg_index);
bekert_szoveg = csere(bekert_szoveg, kezdo_index, i);
}
}
}
/* Karakterek cseréje
a felcserélt stringet adja vissza */
public static String csere(String a, int i, int j)
{
char temp;
char[] tomb_karakterek = a.ToCharArray();
temp = tomb_karakterek[i];
tomb_karakterek[i] = tomb_karakterek[j];
tomb_karakterek[j] = temp;
string s = new string(tomb_karakterek);
return s;
}
// Fő program
public static void Main()
{
String bekert_szoveg = "INFO";
int n = bekert_szoveg.Length;
permutacio(bekert_szoveg, 0, n - 1);
Console.ReadKey();
}
}