NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Mezinárodní den IT společnosti je tady! Pouze nyní můžeš získat 90 % extra kreditů při nákupu od 1199 kreditů s promo kódem AJTACI90. Tak neváhej!

Diskuze – Lekce 12 - Textové řetězce v C# do třetice - Split a Join

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
Raiper34
Tvůrce
Avatar
Odpovídá na David Hartinger
Raiper34:4.8.2012 22:57

Nie že nefunguje,ale je to zle vypočítané ;)

 Console.WriteLine("Já bych všechny ty internety zakázala.".Insert(21, "ne"));
Výstup:

Já bych všechny ty internety nezakázala.

miesto 21 tam má byť 29

Odpovědět
4.8.2012 22:57
Posledná vydaná hra: http://www.islandsoft.cz/index.php?art=hra-akcna-space-resistance
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Raiper34
David Hartinger:4.8.2012 23:35

Jo, to je pravda, opravím, dík ;-)

Odpovědět
4.8.2012 23:35
New kid back on the block with a R.I.P
Avatar

Člen
Avatar
:30.8.2012 14:23

Ahoj,
zkoušel jsem si naprogramovat tu morseovku opačně, ale nějak to nefunguje.
Lámu si s tím hlavu hodiny, ale fakt nevím ...

string puvodniRetezec = "Morseova abeceda";
Console.WriteLine("Původní zpráva: {0}", puvodniRetezec);
// výsledná zpráva
string konecnyRetezec = "";
// vzory
string abecedniZnaky1 = "abcdefghijklmnopqrstuvwxyz";
string[] morseovyZnaky1 = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....",
                          "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-",
                          "...-", ".--", "-..-", "-.--", "--.."};

puvodniRetezec = puvodniRetezec.ToLower();
foreach (char pism in puvodniRetezec) // Přidám za každý znak mezeru, abych mohl porovnávat
{
    puvodniRetezec += pism+" ";
}
string[] pismena = puvodniRetezec.Split(' ');
foreach (string pismeno in pismena)
{
    string abecedniZnak = "?";
    int index = abecedniZnaky1.IndexOf(pismeno);
    if (index >= 0) // znak nalezen
        abecedniZnak = morseovyZnaky1[index]+" "; // Vypisuji s mezerou, pro lepší čitelnost
    konecnyRetezec += abecedniZnak;
}
Console.WriteLine("Dekódovaná zpráva: {0}", konecnyRetezec);

Program vyhodí konečnou zprávu v morseovce, ale:

  1. Na začátku má být -- --- atd., ale je tam ??---
  2. Je tam navíc pár a (.-) -> zhruba uprostřed a na konci -> možná to je přebytečnými mezerami?

Toť vše.
Díky za radu a skvělé tutoriály ... snad se taky časem naučím programovat a lépe programátorsky myslet :/

 
Odpovědět
30.8.2012 14:23
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na
David Jančík:30.8.2012 14:56

Moc složitě to děláš. Čti moje komentáře:

// pojmenovávej proměnné tak aby jsi se v nich vyznal
string vstup = "Morseova abeceda";
Console.WriteLine("Původní zpráva: {0}", vstup);
// výsledná zpráva
string vystup = "";
// vzory
string abecedniZnaky = "abcdefghijklmnopqrstuvwxyz";
string[] morseovyZnaky = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....",
                          "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-",
                          "...-", ".--", "-..-", "-.--", "--.."};

// převedu na malá odstraním mezery a zavolám trim ten zařídí aby tam nebyly nějaké white-space znaky
vstup = vstup.ToLower().Replace(" ", "").Trim();

// takto jednoduše můžeš převést na pole. Pokud chceš cyklus pak tam nedávej na konec " " mezeru jinak pak budeš mít v poli prázdnou hodnotu
char[] poleZnakuVstupu = vstup.ToCharArray();

foreach (char pismeno in poleZnakuVstupu)
{
        string abecedniZnak = "?";
        int index = abecedniZnaky.IndexOf(pismeno);
        if (index >= 0) // znak nalezen
                abecedniZnak = morseovyZnaky[index] + " "; // Vypisuji s mezerou, pro lepší čitelnost
        vystup += abecedniZnak;
}
Console.WriteLine("Dekódovaná zpráva: {0}", vystup);
Console.Read();

Pokud budeš chtít něco vysvětlit podrobněji nebo máš nějaký jiný dotaz ptej se :)

Odpovědět
30.8.2012 14:56
Zapomeň, že je to nemožné a udělej to ;)
Avatar
David Jančík
Vlastník
Avatar
Odpovídá na
David Jančík:30.8.2012 15:01

Ještě vysvětlím co jsi tam měl špatně.

foreach (char pism in puvodniRetezec) // Přidám za každý znak mezeru, abych mohl porovnávat
{
    puvodniRetezec += pism+" ";
}

Přičítal jsi k tomu vstupnímu slovu jeho znaky
tzn bylo tam "morseova abeceda m o r s e "....

Proto ty první dva znaky byly "??" protože ty dvě slova v tom poli se znaky nebyly.

A když si to takhle uděláš tak ti vznikne řetězec oddělenej mezerama. Ale musíš si dát pozor na poslední mezeru "a b e c e d a " protože když pak zavoláš split tak ono ti to hodí do pole ale v tom posledním nic nebude. Tzn tu mezeru musíš pak odečíst. Ale je lepší použít ToCharArray()

Je dobré si to vypisovat abys na to přišel. Vyzkoušej Debug.Write to píše do toho debug okénka dole ve VS studiu tzn. nebudeš to mtí v konzoli ;)

Odpovědět
30.8.2012 15:01
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Kit
Tvůrce
Avatar
Odpovídá na
Kit:30.8.2012 23:14

V původním článku je chyba. Je tam použit jeden string a jedno pole. Správně je místo toho použít jeden slovník. Když to uděláš obráceně, bude to také fungovat.

Odpovědět
30.8.2012 23:14
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Kit
David Hartinger:31.8.2012 10:30

To je samozřejmě proto, že slovníky se probírají až dále. Nenazýval bych to chybou, není to špatně, jen to jde napsat lépe, až bude člověk pokročilejší.

Odpovědět
31.8.2012 10:30
New kid back on the block with a R.I.P
Avatar
Neaktivní uživatel:25.10.2012 16:15

Dá se nějak zjistit, na které pozici je nějaký znak ?

Odpovědět
25.10.2012 16:15
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Neaktivní uživatel:25.10.2012 16:20

ajo už to vidím v programech se zdrojaky

Odpovědět
25.10.2012 16:20
Neaktivní uživatelský účet
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
matesax:25.10.2012 16:21

Ale tak to jsou základy... :) Navíc to tu je. (Někde v tutoriálech.)

IndexOf
 
Odpovědět
25.10.2012 16:21
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 90.