Stránka sa načítava, prosím čakajte…
© 2005 – 2024 Roman Horváth, všetky práva vyhradené. Dnes je 20. 4. 2024.
Dátum: 5. 9. 2021, pred tromi rokmi
Tento článok sa zaoberá výpisom znakov s pomocou ASCII kódov (a naopak). Problematika tabuľky znakov je v súčasnosti omnoho komplikovanejšia v porovnaní s časom, kedy vznikla. Súčasné aplikácie používajú „nadstavbu“ tejto tabuľky zvanú Unicode. S používaním tohto štandardu je spojených mnoho komplikácií, ktorými sa však nebudeme zaoberať. Len pre zaujímavosť, pozrite si informácie v týchto zdrojoch:
- Albert : String – What is the standard algorithm for converting unicode characters into lowercase? In Stack Overflow. [online]. [cit. 2021‑09‑05]. Dostupné na internete: ⟨https://stackoverflow.com/questions/3522387/what‑is‑the‑standard‑algorithm‑for‑converting‑unicode‑characters‑into‑lowercase ⟩.
- Bennett, James : Truths programmers should know about case. In James Bennett’s Weblog. [online]. [cit. 2021‑09‑05]. Dostupné na internete: ⟨https://www.b‑list.org/weblog/2018/nov/26/case/ ⟩.
- Unicode casing algorithm. In Second wiki. [online]. [cit. 2021‑09‑05]. Dostupné na internete: ⟨https://second.wiki/wiki/unicode‑casing‑algorithmus ⟩.
- UTS #10: Unicode Collation Algorithm. In Unicode, Inc. [online]. [cit. 2021‑09‑05]. Dostupné na internete: ⟨https://unicode.org/reports/tr10/ ⟩.
Cieľové zadanie
Napíšte krátky program, ktorý vypíše tabuľku znakov v rozsahu ASCII kódov 32 až 126. (Bude riešené nižšie, po malom spresnení.)
Prípravné zadania
- Vypíšte jeden náhodne zvolený znak z rozsahu ASCII 32 až 126.
~
long číslo = náhodnéCeléČíslo(32, 126); vypíšRiadok("Znak č. ", číslo, " – " , (char)číslo);
Príklad výsledku
Znak č. 44 – ,
- Vypíšte všetky znaky z rozsahu ASCII 32 až 126.
~
for (int kód = 32; kód <= 126; ++kód) vypíšRiadok(kód + " – " + (char)kód);
Výsledok
32 – 33 – ! 34 – " 35 – # 36 – $ 37 – % 38 – &
… (skrátené) …
120 – x 121 – y 122 – z 123 – { 124 – | 125 – } 126 – ~
Spresnené cieľové zadanie
Vypíšte všetky znaky z rozsahu ASCII 32 až 126 tak, aby boli rozmiestnené v šiestich stĺpcoch.
Riešiť to môžeme rôzne. Napríklad dvomi cyklami (pričom posledných päť znakov musíme vypísať zvlášť, inak by sme vypísali aj znak číslo 127):
~
for (int kód = 32; kód <= 121; kód += 6) { for (int i = 0; i < 6; ++i) vypíš((kód + i), " : ", (char)(kód + i), "\t\t"); vypíšRiadok(); } for (int kód = 122; kód <= 126; ++kód) vypíš(kód, " : ", (char)kód, "\t\t"); vypíšRiadok('\n');
Výsledok
32 : 33 : ! 34 : " 35 : # 36 : $ 37 : % 38 : & 39 : ' 40 : ( 41 : ) 42 : * 43 : + 44 : , 45 : - 46 : . 47 : / 48 : 0 49 : 1 50 : 2 51 : 3 52 : 4 53 : 5 54 : 6 55 : 7 56 : 8 57 : 9 58 : : 59 : ; 60 : < 61 : = 62 : > 63 : ? 64 : @ 65 : A 66 : B 67 : C 68 : D 69 : E 70 : F 71 : G 72 : H 73 : I 74 : J 75 : K 76 : L 77 : M 78 : N 79 : O 80 : P 81 : Q 82 : R 83 : S 84 : T 85 : U 86 : V 87 : W 88 : X 89 : Y 90 : Z 91 : [ 92 : \ 93 : ] 94 : ^ 95 : _ 96 : ` 97 : a 98 : b 99 : c 100 : d 101 : e 102 : f 103 : g 104 : h 105 : i 106 : j 107 : k 108 : l 109 : m 110 : n 111 : o 112 : p 113 : q 114 : r 115 : s 116 : t 117 : u 118 : v 119 : w 120 : x 121 : y 122 : z 123 : { 124 : | 125 : } 126 : ~
Alebo s pomocou počítania zvyškov po delení:
~
for (int kód = 32; kód <= 126; ++kód) { vypíš(kód, " : ", (char)kód, "\t\t"); if (kód % 6 == 1) vypíšRiadok(); } vypíšRiadok('\n');
Výsledok
32 : 33 : ! 34 : " 35 : # 36 : $ 37 : % 38 : & 39 : ' 40 : ( 41 : ) 42 : * 43 : + 44 : , 45 : - 46 : . 47 : / 48 : 0 49 : 1 50 : 2 51 : 3 52 : 4 53 : 5 54 : 6 55 : 7 56 : 8 57 : 9 58 : : 59 : ; 60 : < 61 : = 62 : > 63 : ? 64 : @ 65 : A 66 : B 67 : C 68 : D 69 : E 70 : F 71 : G 72 : H 73 : I 74 : J 75 : K 76 : L 77 : M 78 : N 79 : O 80 : P 81 : Q 82 : R 83 : S 84 : T 85 : U 86 : V 87 : W 88 : X 89 : Y 90 : Z 91 : [ 92 : \ 93 : ] 94 : ^ 95 : _ 96 : ` 97 : a 98 : b 99 : c 100 : d 101 : e 102 : f 103 : g 104 : h 105 : i 106 : j 107 : k 108 : l 109 : m 110 : n 111 : o 112 : p 113 : q 114 : r 115 : s 116 : t 117 : u 118 : v 119 : w 120 : x 121 : y 122 : z 123 : { 124 : | 125 : } 126 : ~
Doplňujúce zadanie
Vykonajte výpis ASCII kódov ku znakom z rozsahu ' '
až '~'
v šiestich stĺpcoch.
~
for (char znak = ' '; znak <= '~'; ++znak) { vypíš(znak, " : ", (int)znak, "\t\t"); if (znak % 6 == 1) vypíšRiadok(); } vypíšRiadok('\n');
Výsledok
: 32 ! : 33 " : 34 # : 35 $ : 36 % : 37 & : 38 ' : 39 ( : 40 ) : 41 * : 42 + : 43 , : 44 - : 45 . : 46 / : 47 0 : 48 1 : 49 2 : 50 3 : 51 4 : 52 5 : 53 6 : 54 7 : 55 8 : 56 9 : 57 : : 58 ; : 59 < : 60 = : 61 > : 62 ? : 63 @ : 64 A : 65 B : 66 C : 67 D : 68 E : 69 F : 70 G : 71 H : 72 I : 73 J : 74 K : 75 L : 76 M : 77 N : 78 O : 79 P : 80 Q : 81 R : 82 S : 83 T : 84 U : 85 V : 86 W : 87 X : 88 Y : 89 Z : 90 [ : 91 \ : 92 ] : 93 ^ : 94 _ : 95 ` : 96 a : 97 b : 98 c : 99 d : 100 e : 101 f : 102 g : 103 h : 104 i : 105 j : 106 k : 107 l : 108 m : 109 n : 110 o : 111 p : 112 q : 113 r : 114 s : 115 t : 116 u : 117 v : 118 w : 119 x : 120 y : 121 z : 122 { : 123 | : 124 } : 125 ~ : 126
Bonusové zadanie
Vypíšte reťazec zadaný používateľom po znakoch. Najskôr presne tak, ako bol zadaný a potom ešte raz, ale zväčšite všetky malé písmená na veľké. Najprv zrealizujte zväčšovanie písmen cez ASCII kódy (v rozsahu anglickej abecedy) a potom cez preddefinované metódy Javy (čo je všeobecnejšie riešenie, pretože pracuje aj s diakritickými znakmi).
~
String reťazec = zadajReťazec("Zadaj reťazec"); // Výpis po znakoch: for (int i = 0; i < reťazec.length(); ++i) vypíš(reťazec.charAt(i)); vypíšRiadok(); // Zväčšovanie malých písmen anglickej abecedy: for (int i = 0; i < reťazec.length(); ++i) { if (reťazec.charAt(i) >= 'a' && reťazec.charAt(i) <= 'z') vypíš((char)(reťazec.charAt(i) - 32)); else vypíš(reťazec.charAt(i)); } vypíšRiadok(); // Zväčšovanie všetkých malých písmen: for (int i = 0; i < reťazec.length(); ++i) { if (Character.isLowerCase(reťazec.charAt(i))) vypíš(Character.toUpperCase(reťazec.charAt(i))); else vypíš(reťazec.charAt(i)); } vypíšRiadok();
Možný výsledok
(Po zadaní „Zadaný reťazec.“)
Zadaný reťazec. ZADANý REťAZEC. ZADANÝ REŤAZEC.
Ďalším krokom môže byť grafická tabuľka znakov.