NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 11 - Textové řetězce v C# podruhé - Práce s jednotlivými znaky

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Odpovídá 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.

 
Odpovědět
14.5.2016 20:49
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

 
Odpovědět
14.5.2016 21:20
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);

 
Odpovědět
20.10.2016 22:26
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ř. ü, ŕ). :)

 
Odpovědět
27.4.2017 16:03
Avatar
Odpovídá na rimodar65
Radek Novotný:17.6.2017 10:37

máš tam u string velké S

 
Odpovědět
17.6.2017 10:37
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();
 
Odpovědět
7.10.2017 13:32
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.

 
Odpovědět
8.2.2018 22:18
Avatar
Petr Zajac
Člen
Avatar
Odpovídá 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

 
Odpovědět
24.2.2018 16:55
Avatar
Petr Zajac
Člen
Avatar
Odpovídá 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

 
Odpovědět
24.2.2018 22:32
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é. :-)

Odpovědět
24.4.2018 18:45
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 115.