Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 11. diel - Textové reťazce v C# druhýkrát - Práca s jednotlivými znakmi

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Odpovedá na Dominik Gavrecký
Dávid Šutor:14.5.2016 20:49
// hlavní cyklus
foreach (char c in s)
{

}

Tento cyklus funguje následovne. Keď cyklus začne, premenná c nadobudne hodnotu prvého znaku (char) v stringu s. Po vykonaní príkazov v tele cyklu premenná c nadobudne hodnotu ďalšieho znaku (char). Takto to bude pokračovať do vtedy, kým neprejde všetky znaky (char). Premenná c bude iba nadobúdať char.

Avatar
Petr Šťastný
Tvůrce
Avatar
Petr Šťastný:14.5.2016 21:20

A ohledně ASCII, tohle je trochu delší, ale dobře to ukazuje, jak jde s ASCII pracovat :)

http://www.itnetwork.cz/dev-lighter/732

Avatar
Robert
Člen
Avatar
Robert:20.10.2016 22:26

//3. Cézarova šifra:
Console.Write­Line("Zadaj ľubovoľný reťazec a ja ho zašifrujem.");
Console.Write­Line("POZOR!!! Zapisuj bez diakritiky a bez medzier!");
Console.Write("Tex­t: ");

string sprava = Console.ReadLine();

//Opýtať sa na hodnotu posunu
Console.Write("O akú hodnotu chceš posúvať text? [napr. o 2 znaky...]:");
int posun = int.Parse(Con­sole.ReadLine());
Console.Write­Line();
Console.Write­Line("Povodná správa: {0}", sprava);
sprava = sprava.ToLower();

//dekloarovanie premennej pre uloženie zašifrovanej správy
string sifrovana = "";

foreach(char z in sprava){

int j = (int)z;
j += posun;

//kontrola pretečenia!!!
if(j > (int)'z'){
j -= 26;
}

char znak = (char)j;
sifrovana += znak;
}
Console.Write­Line("Zašifro­vaná správa: {0}", sifrovana);

string desifrovana = "";

//Dešifrovanie správy
Console.Write­Line("Dešifro­vanie zašifrovanej správy: {0}", sifrovana);
foreach(char z in sifrovana){
int j = (int)z;
j -= posun;

//Kontrola pretečenia
if(j<(int)'a'){
j += 26;
}

char znak = (char)j;
desifrovana += znak;

}

Console.Write­Line("Dešifro­vaná správa: {0}", desifrovana);

Avatar
Ariska
Člen
Avatar
Ariska:27.4.2017 16:03

Nepísemné znaky jsou speciální znaky. I v samotném MSWordu máte volbu vložení speciálních znaků, kde jsou právě mezery, uvozovky apod. Symbol by se taktéž dal použít, ale ten se často špatně interpretuje. Navíc speciální znaky jsou konkrétněji a úzce zaměřovány, kdežto symboly pojímají větší škálu znaků (jako např. ü, ŕ). :)

Avatar
Odpovedá na rimodar65
Radek Novotný:17.6.2017 10:37

máš tam u string velké S

Avatar
Ondřej Čech:7.10.2017 13:32

Chybělo mi tam ošetřené přetékání i velkých písmen. Tak jsem to udělal takto.

// inicializace proměnných
            string ss = "cerne diry jsou tam kde buh delil nulou. Zebra zebra AABBCC";
            Console.WriteLine("Původní zpráva: {0}", ss);
            string zprava = "";
            int posun = 1; //Maximalni posun je 6!

            // cyklus projíždějící jednotlivé znaky
            foreach (char cc in ss)
            {
                int ii = (int)cc;
                ii += posun;
                // kontrola přetečení i pro velká písmena
                if (ii > (int)'z' || (ii > 'Z' && ii< 'a' ))
                    ii -= 26;
                char znak = (char)ii;
                zprava += znak;
            }

            // výpis
            Console.WriteLine("Zašifrovaná zpráva: {0}", zprava);
            Console.ReadKey();

            Console.WriteLine();
            Console.WriteLine("Desifrovani");
            string DefZprava="";

            //cyklus na desifraci
            foreach (char c2 in zprava) {
                int i2 = (int)c2;
                i2 -= posun;
                //kontrola přetečení i pro velká písmena. Funguje i s mezerama v textu.
                if ((i2 < (int)'a' && i2 > (int)'Z')||(i2 < (int)'A' && i2 > (int)'A' - posun-1))
                    i2 += 26;
                char znak2 = (char)i2;
                DefZprava += znak2;
            }
            Console.WriteLine("Desifrace: {0}", DefZprava);
            Console.ReadKey();
Avatar
Jan Kalenský:8.2.2018 22:18

Ahoj, takový malý detail. Řekl bych, že v té šifře, abychom tam měli jen písmenka, je lepší použít cyklus while, protože ta podmínka nám 26 odečte pouze jednou, což nemusí stačit.

Avatar
Petr Zajac
Člen
Avatar
Odpovedá na Jan Kalenský
Petr Zajac:24.2.2018 16:55

Mám pocit když budeš hodnotu 26 odečítat víc jak jednou (tj. na vstupu bude i něco jiného než písmenka, resp. písmenka převedená na malá), tak z kódovaného textu bude po dekódování stejným algoritmem hotový "GULÁŠ", protože nebudeš tušit kolikrát jsi vlastně těch 26 odečetl, abys dostal jako výsledek písmenko a dekódování se ti povede "napůl" :-O

Avatar
Petr Zajac
Člen
Avatar
Odpovedá na Jan Kalenský
Petr Zajac:24.2.2018 22:32

Navíc když koukám do ASCII tabulky, tak např.
32 je mezera, 33 vykřičník, 44 čárka, 46 tečka, takže když budu chtít zakódovat tyhle znaky jako písmena tak bych musel přičítat ... To samé čísla 0 je ascii 48 ... Zatímco malé "a" je 97
Když nebudu převádět vše na malé tak bych měl problém i s velkýma písmenama A - 65, Z - 90

Avatar
Neaktivní uživatel:24.4.2018 18:45

Je nějaká metoda rozlišující malá a velká písmena? Dělat to přes
string m = "abcdef…";
string v = "ABCDEF…";
a Contains() mi přijde dost pomalé a složité. :-)

Odpovedať
Neaktivní uživatelský účet
Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 115.