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 – 12. diel - Textové reťazce v C# do tretice - Split a Join

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
Johny Hiawa
Nevyplnené
Avatar
Johny Hiawa:26.8.2013 13:44

Chtěl jsem uděla něco podobného, akorát s tím, že z latinky ty jednotlivé znaky převede do azbuky/cyrilice, ale bohužel mi to vždy vypíše samé otazníky. Netušíte, kde je problém?

Console.WriteLine("Zadejte jakékoliv slovo či jakoukoliv větu");
            string slovo = Console.ReadLine();
            slovo = slovo.ToLower().Trim();
            string vysledek = "";

            string ceskaAbeceda = "abcdefgijklmnoprstuvyz ";
            string ruskaAbeceda = "абцдэфгийклмнопрстувыз ";

            char[] poleCeskychZnaku = slovo.ToCharArray();

            foreach (char ceskeAbecedy in poleCeskychZnaku)
            {

                char ruskyZnak = '?';
                int index = ceskaAbeceda.IndexOf(ceskeAbecedy);
                Console.WriteLine(index);
                if (index >= 0)
                    ruskyZnak = ruskaAbeceda[index];
                vysledek += ruskyZnak;

            }
            Console.WriteLine(vysledek);
            Console.ReadLine();
Avatar
fejjaaas
Člen
Avatar
fejjaaas:22.2.2014 12:46

U příkladu na metodu Remove není výstupem: Kdo se směje, ten je admin. Správný výstup je: Kdo se směje ten je admin. :) To jen tak, kdyby to někoho mátlo.

Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na fejjaaas
David Hartinger:21.3.2014 17:22

Díky, opraveno.

Odpovedať
New kid back on the block with a R.I.P
Avatar
fatst
Člen
Avatar
fatst:22.4.2015 19:09

Prosím o vysvětlení. Mám následující kód, který tu je a funguje, ale stále nechápu použití IndexOf():

            // 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();
            // převod na pole
            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);
        // řetězec, který chceme kódovat
        string s = vystup;
        Console.WriteLine ();
        Console.WriteLine ("=========== Kódování =============");
        Console.WriteLine ("Původní zpráva:{0}", s);
        // řetězec s kódovanou zprávou
        string zprava = "";
        // rozbití řetězce na znaky morzeovky
        string[] znaky = s.Split(' ');
        // iterace znaků morzeovky
        foreach (string morseuvZnak in znaky)
        {
            char abecedniZnak = '?';
            int index = Array.IndexOf(morseovyZnaky, morseuvZnak);
            if (index >= 0) // znak nalezen
                abecedniZnak = abecedniZnaky[index];
            zprava += abecedniZnak;
        }
Console.WriteLine("Dekódovaná zpráva: {0}", zprava);

Prosím tedy o vysvětlení, proč jednou má IndexOf jen jeden parametr

int index = abecedniZnaky.IndexOf(pismeno);

a podruhé je tam Array a dva parametry:

int index = Array.IndexOf(morseovyZnaky, morseuvZnak);

.
Navíc jednou je to za proměnnou a podruhé ne. Nějak se mi z toho motá šiška.
Díky moc.

Avatar
fik...
Člen
Avatar
Odpovedá na fatst
fik...:22.4.2015 19:35

Jde vlastně o dvě různé metody se stejným názvem. V prvním případě voláš metodu přímo na proměnné a tak už v nemusíš proměnnou psát znovu do parametrů metody. Ve druhém případě jde ale o statickou metodu(volá se na třídě Array a ne na proměnné) a tak tam musíš proměnou napsat jako parametr, ale výsledek bude stejný. Více se dozvíš v tutoriálu o OOP. Snad ti to trochu pomohlo.:)

Avatar
fatst
Člen
Avatar
Odpovedá na fik...
fatst:22.4.2015 21:52

Díky moc za vysvětlení. Zatím jsem zmaten, ale jestli je to dále, pokračuji. Ještě si to 5x přečtu... :-)

Avatar
Lukáš Fusek
Tvůrce
Avatar
Lukáš Fusek:22.6.2015 0:11

Ahoj.
Mám problém s převedením textu do Morseovy abecedy.

Console.WriteLine("Zadej text, který chceš zakódovat do Morseovy abecedy");
string vstup = Console.ReadLine();  //načte vstupní text z konzole
vstup = vstup.ToLower().Trim();  //převede vstupní text na malé písmena a odstraní mezery na začátku a konce řetězce
string zakodovanytext = ""; //vysledny zakódovaný text do morseovky

//vzorová pole
string abecedniZnaky = "abcdefghijklmnopqrstuvwxyz";
string[] morseovyZnaky = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};

//iterace abecedních znaků
foreach (char abecedniZnak in vstup)
{
    string morseuvZnak = "?";
    int index = Array.IndexOf(abecedniZnaky, abecedniZnak);
    if (index >= 0)  //znak nalezen
        morseuvZnak = morseovyZnaky[index];
    zakodovanytext += morseuvZnak;
}
Console.WriteLine("Dekódovaná zpráva: " + zakodovanytext);
Console.ReadKey();

Program nelze spustit.
Kompilátor říká:
Error 1 The best overloaded method match for 'System.Array­.IndexOf<char>(ch­ar[], char)' has some invalid arguments
Error 2 Argument 1: cannot convert from 'string' to 'char[]'

Prosím o radu. Předem děkuji. :)

Editované
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovedá na Lukáš Fusek
Ondřej Štorc:22.6.2015 8:26
int index = Array.IndexOf(abecedniZnaky.ToCharArray(), abecedniZnak);

Takhle by to mělo fungovat. Ty totiž dáváš do parametru metody string a ono tam má být pole charů

Odpovedať
Život je příliš krátký na to, abychom bezpečně odebírali USB z počítače..
Avatar
Migi
Tvůrce
Avatar
Migi:7.12.2015 19:06

Ahoj,
zkusil jsem napsat opacny kod, ktere prevede text na morseovku.

string abecedniZnaky = "abcdefghijklmnopqrstuvwxyz";
            string abecedniZnaky1 = "a b c d e f g h i j k l m n o p q r s t u v w x y z";

            string[] abeceda = abecedniZnaky1.Split();

            string[] morseovyZnaky = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....","..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-",
                "...-", ".--", "-..-", "-.--", "--.."};

Console.WriteLine("Zadej text k prekladu:");
            string zprava1 = Console.ReadLine();
            string prekodovana_zprava = "";
            foreach (char c in zprava1)
                if (zprava1[0] == c)
                    prekodovana_zprava = c + " ";
                else

                    prekodovana_zprava = prekodovana_zprava + c + " ";
            prekodovana_zprava = prekodovana_zprava.TrimEnd();

            string[] policko = prekodovana_zprava.Split();

            string dekodovana = "";

            foreach (string pisemko in policko)
            {
                int pozice1 = Array.IndexOf(abeceda, pisemko);
                if (pozice1>=0)
                    if (dekodovana.Length == 0)
                        dekodovana = morseovyZnaky[pozice1];
                    else
                        dekodovana = dekodovana + " " + morseovyZnaky[pozice1];

            }
            Console.WriteLine(dekodovana);
            Console.ReadLine();

Chtel jsem se zeptat, zda me reseni neni zbytecne slozity? Jak funguje to, nejsou osetreny mezery mezi slovy... ale neslo mi cist vstupni text po znacich, ktery pak hledam pomoci Array.IndexOf v poli :-( Znaky abebecedy jsem mel taky jako string pole[] a hledal jsem v tom char a to se bortilo, tak jsem to obesel ze jsi kazdy znak prolozim mezerou a nakonci natrimuju, pak Split a dostanu onez pole pro Array.IndexOf a pak uz to jelo 8-)

Diky

Editované
Odpovedať
I ta nejhorsi hodina v zivote trva jen 60 minut...
Avatar
Migi
Tvůrce
Avatar
Odpovedá na Migi
Migi:7.12.2015 19:13

No proc to psat jednoduse, kdyz to jde slozite %P Viz vyse. Tohle je to cistejsi reseni, predpokladam.

string abecedniZnaky = "abcdefghijklmnopqrstuvwxyz";
string[] morseovyZnaky = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....","..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-",
                "...-", ".--", "-..-", "-.--", "--.."};
Console.WriteLine("Zadej text k prekladu:");
            string zprava1 = Console.ReadLine();

            string dekodovana = "";

            foreach (char pisemko in zprava1)
            {
                int pozice1 = Array.IndexOf(abecedniZnaky.ToCharArray(), pisemko);
                if (pozice1 >= 0)
                    if (dekodovana.Length == 0)
                        dekodovana = morseovyZnaky[pozice1];
                    else
                        dekodovana = dekodovana + " " + morseovyZnaky[pozice1];

            }
            Console.WriteLine(dekodovana);
            Console.ReadLine();
Odpovedať
I ta nejhorsi hodina v zivote trva jen 60 minut...
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 90.