NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

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
Johny Hiawa
Neregistrovaný
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();
 
Odpovědět
26.8.2013 13:44
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.

 
Odpovědět
22.2.2014 12:46
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na fejjaaas
David Hartinger:21.3.2014 17:22

Díky, opraveno.

Odpovědět
21.3.2014 17:22
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.

 
Odpovědět
22.4.2015 19:09
Avatar
fik...
Člen
Avatar
Odpovídá 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.:)

 
Odpovědět
22.4.2015 19:35
Avatar
fatst
Člen
Avatar
Odpovídá 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... :-)

 
Odpovědět
22.4.2015 21:52
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. :)

Editováno 22.6.2015 0:12
 
Odpovědět
22.6.2015 0:11
Avatar
Ondřej Štorc
Tvůrce
Avatar
Odpovídá 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ů

Odpovědět
22.6.2015 8:26
Ž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

Editováno 7.12.2015 19:08
Odpovědět
7.12.2015 19:06
I ta nejhorsi hodina v zivote trva jen 60 minut...
Avatar
Migi
Tvůrce
Avatar
Odpovídá 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();
Odpovědět
7.12.2015 19:13
I ta nejhorsi hodina v zivote trva jen 60 minut...
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.