Znaky. IAJCE Přednáška č. 10. každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak <->



Podobné dokumenty
Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

- jak udělat konstantu long int: L long velka = 78L;

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Algoritmizace a programování

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Úvod do programování 6. hodina

Formátové specifikace formátovací řetězce

Zápis programu v jazyce C#

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Lekce 2. Řetězce a práce s nimi. Vstup a výstup. C2184 Úvod do programování v Pythonu podzim 2016

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Aplikovaná informatika. Podklady předmětu Aplikovaná informatika pro akademický rok 2006/2007 Radim Farana. Obsah. Obsah předmětu

Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false

ADT/ADS = abstraktní datové typy / struktury

Ošetřování chyb v programech

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

Informatika Datové formáty

Paměť počítače. alg2 1

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

7. Datové typy v Javě

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

MQL4 COURSE. By Coders guru -3 DATA TYPES. Doufám, že předchozí lekce SYNTAX se vám líbila. V té jsme se pokoušeli zodpovědět:

C# konzole Podíl dvou čísel, podmínka IF

Struktura programu, proměnné, konstanty, výrazy v jazycích C a C#

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Algoritmy a datové struktury

Jazyk C# a platforma.net

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

URČITÝM ZPŮSOBEM PODOBNÉ

NPRG031 Programování II 1 / :47:55

Úvod do programovacích jazyků (Java)

IUJCE 07/08 Přednáška č. 1

Základy programování (IZP)

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Textové soubory. alg9 1

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

Regulární výrazy. Vzory

Programovací jazyk Pascal

8 Třídy, objekty, metody, předávání argumentů metod

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

Programování v jazyce JavaScript

Úvod do programování. Lekce 1

PROGRAMOVÁNÍ V SHELLU

Programování v Javě I. Leden 2008

NMIN201 Objektově orientované programování 2016/17 1 / :03:29

PREPROCESOR POKRAČOVÁNÍ

Úvod do programovacích jazyků (Java)

Formátová specifikace má tvar (některé sekce nemají smysl pro načítání) %

IRAE 07/08 Přednáška č. 7. Začátek (head)

Sada 1 - PHP. 03. Proměnné, konstanty

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Tvorba výrazu: speciální znaky shellu se uvádějí do apostrofů jednotlivé části výrazu se oddělují mezerou

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Generické programování

Programování v Javě I. Únor 2009

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Sada 1 - Základy programování

Tato tematika je zpracována v Záznamy přednášek: str materiál: PrikladyZobrazeniCisel.pdf

Práce s textem. Třída Character. Třída Character. Třída Character. reprezentuje objekty zapouzdřující hodnotu typu char (boxing / unboxing)

přetížení operátorů (o)

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Programování v jazyce C pro chemiky (C2160) 9. Práce s PDB soubory

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Datové typy strana 29

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

NPRG031 Programování II --- 2/2 Z, Zk

5 Přehled operátorů, příkazy, přetypování

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

přetížení operátorů (o)

- dělají se také pomocí #define - podobné (použitím) funkcím - předpřipravená jsou např. v ctype.h. - jak na vlastní makro:

Seminář Java II p.1/43

Zobrazení dat Cíl kapitoly:

9. přednáška - třídy, objekty

Programování v C++ 1, 5. cvičení

Úvod do programování - Java. Cvičení č.4

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Výčtový typ strana 67

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

Základy programování (IZP)

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Algoritmizace a programování

Transkript:

Znaky každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak <-> číslo) kódování jiný příklad kódování existuje mnoho kódů pojmy: morseova abeceda problémy o znaková sada které znaky budou kódovány na jaká čísla (např. A 65) o charset, (kódování) jak budou v rámci znakové sady čísla uložena (1 znaková sada = i více charsetů) o 65 jako 1B, 65 jako 4B, ASCII American Standard Code for Information Interchange = Znaková sada i charset pro základní znaky anglické abecedy, číslice, netisknutelné znaky (enter, tab apod.), jedno z nejstarších kódování 7-bitová (nejvyšší bit je 0) čísla 0 127 8b sady ASCII kód Řídící znaky 0 32 číslice 0 48 1 49 9 57 velká písmena A 65 B 66 Z 91 malá písmena a 97 b 98 z 123 Na uložení 1 znaku Základ všech ostatních sad Rozšíření ASCII 1 B (horních 128 b nevyužito) Např.: o Win1250 až Win1258 pouze ve Windows; východoevropské země = Win1250 (CP1250) o ISO 8859-1 až ISO 8859-15 mezinárodní standard, starší distribuce Linuxu; čeština je ISO 8859-2 o CP4xx, CP8xx pro MS-DOS (čeština CP852) 1

o Kameničtí, Princip: o Dolních 128 B = ASCII o Horních 128 bytů znaky národních abeced Problém špatně zvoleného kódování nefunkční znaky z horní poloviny tabulky o text v ISO8859-2 zobrazený jako Win1250 Unicode www.unicode.org pojme všechny národní abecedy původně 16b (až 65 536 možných znaků), od verze 2.0 32b (používá se jen 21b) možné charsety: o UTF-8 proměnný počet bytů (1-4) o UTF-16 o UTF-32 16b (2B) 32b (4B) základ společný s ASCII bitů Písmeno A ASCII 7 0x41 Win1250, ISO8859-2, UTF-8 8 0x41 Unicode (UTF-16) 16 0x00 41 Unicode (UTF-32) 32 0x00 00 00 41 Znaky v C# Vše Unicode datový typ char 16b (UTF-16) Znakové konstanty (literály) vždy uzavřeny mezi apostrofy'' Možnosti zápisu znak přímo '4', 'a', '*' Unicode v hexa soustavě obvykle pro neviditelné znaky o '\0x????' o '\u????' přednostně char znak = '\u0041'; // A 2

o pozn: \ má význam změny významu;'\u0041' = jinak nedovolená čtyřznaková konstanta. Konstanta uvozená \ = escape sekvence znakové escape sekvence Unicode Název Význam \0 0x0000 Nul Nula \a 0x0007 Alert (Bell) pípnutí \b 0x0008 Backspace návrat o jeden znak zpět \f 0x000C Formfeed nová stránka nebo obrazovka \n 0x000A Newline přesun na začátek nového řádku \r 0x000D Carriage return přesun na začátek aktuálního řádku \t 0x0009 Horizontal tab přesun na následující tabelační pozici \\ 0x005C Backslash obrácené lomítko \' 0x0027 Single quote apostrof \" 0x0022 Double quote uvozovky Znaky a klávesnice načítání znaku: char znak = Char.Parse(Console.ReadLine()); o pokud zadán > 1 znak pád programu čekání na stisk klávesy (klávesa nebude zobrazena na konzoli) Console.Write("Pro pokračování stiskněte jakoukoli klávesu..."); Console.ReadKey(); Práce se znaky ruční znak = číslo lze provádět mat. operace implicitní konverze (uložena odpovídající Unicode hodnota) na typy: o všechny reálné o celočíselné ushort a vyšší číslo lze přetypovat na char uložen znak odpovídající Unicode hodnotě char znak = (char)88; // X Příklad: převod velkého písmena na malé const int offset = 'a' - 'A'; // a = 97, A = 65 char velke = 'U'; char male = (char)(velke + offset); // u Příklad: test, je-li zadaný znak číslice char znak = Char.Parse(Console.ReadLine()); if ((znak >= '0') && (znak <= '9')) Console.WriteLine("je to cislice"); 3

Práce se znaky třída Char Konverze char Char.ToLower(char c) pokud je c velké písmeno, převede jej na malé, ostatních si nevšímá char Char.ToUpper(char c) obráceně Příklad: test, je-li zadaný znak 'a' bez ohledu na velikost char znak = Char.Parse(Console.ReadLine()); if (Char.ToLower(znak) == 'a') Console.WriteLine("je to a nebo A"); Testy Řetězce Všechny metody vrací bool Číslice (0 9) IsDigit(char c), IsNumber(char c) Písmeno (A Z nebo a z) IsLetter(char c) Písmeno nebo číslice IsLetterOrDigit(char c) Malé písmeno IsLower(char c) Velké písmeno IsUpper(char c) Příklad: test, je-li zadaný znak číslice char znak = Char.Parse(Console.ReadLine()); if (Char.IsDigit(znak)) Console.WriteLine("je to číslice"); = posloupnost Unicode znaků (char) datový typ string (CTS třída System.String) referenční typ Základy práce deklarace proměnné, konzole Console.Write("Zadej jmeno: "); string jmeno = Console.ReadLine(); Console.WriteLine("jmeno = 0", jmeno); Zjištění délky řetězce string s3 = "ahoj"; int delka = s3.length; // 4 4

string při čtení se může chovat jako pole znaků (char[]) string text = "ahoj"; for (int i = 0; i < text.length; i++) Console.WriteLine(text[i]); Escape sekvence v řetězcích Console.Write("Ahoj\n"); // = Console.WriteLine(); string s4 = "citace: \"šla Nanynka do zelí\", atd."; string s5 = "C:\\Dokumenty\\soubor.txt"; Pole řetězců o Lze vypnout string s6 = @"C:\Dokumenty\soubor.txt"; Prázdný řetězec string text1; // null string text2 = ""; // reference na prazdny retezec string text2 = String.Empty; // reference na prazdny retezec Zcela normálně string[] poleretezcu = new string[3]; poleretezcu[0] = "Ahoj"; string text = "BlaBlaBla"; poleretezcu[1] = text; Console.Write("Zadej jmeno: "); poleretezcu[2] = Console.ReadLine(); for (int i = 0; i < poleretezcu.length; i++) Console.WriteLine("poleRetezcu[0] = 1", i, poleretezcu[i]); Lze použít Array.Sort(), Array.BinarySearch() 5

Řetězce a metody Řetězec jako parametr metody static void TiskChyby(string popis) Console.WriteLine("V programu došlo k závažné chybě!!!"); Console.WriteLine("Popis chyby: 0", popis); Příklad volání string error = "Dělení nulou"; TiskChyby(error); TiskChyby("Vybuchl Vám zdroj"); Řetězec jako návratová hodnota static string NactiString() Console.Write("Zadej text: "); string temp = Console.ReadLine(); return temp; o Lepší řešení return Console.ReadLine(); Příklad volání string pozdrav = NactiString(); Změna řetězce uvnitř metody static void InvertujVelikostPismen(ref string retezec) // u retezec zamenim mala pismena za velka a naopak Příklad volání jen pro zlepšení čitelnosti kódu (string = referenční typ) string s7 = "AhOj"; InvertujVelikostPismen(ref s7); // s7 bude "ahoj"; Práce s řetězci možnosti: o ruční o instanční metody o statické metody o operátory Instanční vs. statické metody viz další semesetr o instanční metody: volání ve tvaru promenna.metoda() 6

Porovnávání string text = "ahoj"; string novy = text.toupper(); // "AHOJ" o statické metody: volání ve tvaru String.Metoda() string jmeno = "Martin"; string prijmeni = " Hajek"; string jmenoprijmeni = String.Concat(jmeno, prijmeni); rovnost obsahu (== a!=) string s1 = "ahoj"; string s2 = "ahoj"; if (s1 == s2) Console.WriteLine("stejne"); if (s1 == "nazdar") Console.WriteLine("text1 je nazdar"); if (text1!= String.Empty) Console.WriteLine("text1 není prazdny"); lexikografické porovnání int String.Compare(string s1, string s2) o Vrací: záporné číslo: s1 je menší než s2 0: řetězce jsou identické kladné číslo: s1 je větší než s2 o Lexikografické porovnání: a < b ab < ac (komár < kořen) a < A aa < aaa (Martin < Martina) int vysledek = String.Compare(text1, text2); if (vysledek > 0) Console.WriteLine("text1 lexikograficky vetsi nez text2"); else if (vysledek < 0) Console.WriteLine("text1 lexikograficky mensi nez text2"); else Console.WriteLine("stejne"); Vyhledávání v obsahu Instanční metoda bool Contains(string co) o obsahuje-li řetězec podřetězec co string osloveni = "Mile deti!"; if (osloveni.contains("deti")) Console.Write("obsahuje slovo \"deti\""); Instanční metoda bool StartsWith(string s) o Test, začíná-li řetězec řetězcem s 7

Úpravy string osloveni = "Mile deti!"; if (osloveni.startswith("mile")) Console.Write("zacina slovem \"Mile\""); Instanční metoda bool EndsWith(string s) o Test, končí-li řetězec řetězcem s Instanční metoda int IndexOf(něco) o vyhledává první výskyt něco v řetězci o dle něco 9 přetížení: co se vyhledává: jiný řetězec jeden znak (char) kde vyhledávat: odkud: int startindex kolik znaků : int count o Vrací: něco nenalezeno: -1 Nalezeno: pozice prvního výskytu o Příklad string s = "se se se: Ahoj mami, jak se máš"; int pozice = s.indexof("se", 8); // = 25 Instanční metoda int LastIndexOf(něco) o = IndexOf(), jen od konce Spojení řetězců lze pomocí přetíženého + string retezec1 = "Ahoj "; string jmeno = "Martine!"; string pozdrav = retezec1 + jmeno; // "Ahoj Martine!" o Jeden z argumentů číslo automatický převod na string string s = "a = " + 10; // "a = 10" Instanční metoda string Substring(int start) o Vrací podřetězec od pozice start Instanční metoda string Substring(int startindex, int N) o Vrací podřetězec od pozice start délky N znaků o Příklad: string osloveni = "Mile deti!"; string koho = osloveni.substring(5, 4); // "deti" Instanční metoda string Insert(int kam, string co) o do řetězce vloží co od pozice kam o vrací: nově vybudovaný řetězec 8

o příklad: string s12 = "Ahoj tati"; string s23 = s12.insert(5, "mami a "); // Ahoj mami a tati Instanční metoda string Remove(int start) o Vymaže znaky od pozice start do konce řetězce Instanční metoda string Remove(int start, int N) o Vymaže N znaků od pozice start string osloveni = "Mile deti!"; string bezdeti = osloveni.remove(4, 5); // Mile! Tisk do řetězce Instanční metoda string Replace(char stary, char novy) o V řetězci zamění všechny výskyty znaku stary za novy string seznam = "1, 2, 3, 4, 5"; string novyseznam = seznam.replace(',', ';'); // 1; 2; 3; 4; 5 Instanční metoda string Replace(string stary, string novy) o V řetězci zamění všechny výskyty řetězce stary za novy string dopis = "soudruh Novak a soudruh Hajek"; string novydopis = dopis.replace("soudruh", "pan"); // pan Novak a pan Hajek A mnohé další viz. MSDN Statická metoda string String.Format("text s ", vyrazy) int p1 = 10; double p2 = 12.33; string s = String.Format("p1 = 0, p2 = 0:F1", p1, p2); // s = "p1 = 10, p2 = 12.3" Převod na pole znaků a zpět Užitečné při složitých ručních úpravách string text = "abcdef"; char[] textjakopole = text.tochararray(); // nejake upravy po znacich string zpetnastring = new String(textJakoPole); 9

Dodatek pro pokročilé Řetězce jsou tzv. neměnné (immutable) nového: jakákoli změna v řetězci = vytvoření string s1 = "text"; string s2 = s1; // = s2 odkaz na stejný objekt jako s1 Console.WriteLine("s1: 0", s1); Console.WriteLine("s2: 0", s2); s1 = "jiny text";// změna v s1 Console.WriteLine("s1: 0", s1); Console.WriteLine("s2: 0", s2); vytvoření nového řetězce. Pokud na původní řetězec: o vede jiný odkaz (zde s2) o nevede jiný odkaz původní zůstane zachován bude zrušen (automatická správa paměti) Z toho plyne: string se nehodí na rozsáhlejší manipulace s textem o Vhodnější je StringBuilder nebo převod na pole znaků 10