Zakodovani textu – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Zakodovani textu – .NET – Fórum – Programujte.comZakodovani textu – .NET – Fórum – Programujte.com

 

TrixCZE0
Newbie
15. 4. 2019   #1
-
0
-

Ahoj, 

Zkoušel jsem udělat program na zakodovani textu. Funguje je mi ale prijde mi velice slozity hlavne v te casti kde menim pismena. Neporadil by mi nekdo jak to udelat efektivneji? 

Dekuji zde je zdrojak.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KodovaniZpravy
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Zadej text, ktery chete zakodovat.");
            string text = Console.ReadLine();
            text = text.ToLower();
            Zakodovani(text);
            Console.ReadKey();
        }

        private static void Zakodovani(string text)
        {
            char[] polePismenOriginal = new char[text.Length];
            char[] polePismenZakodovane = new char[text.Length];
            int i = 0;
            char a;
            int y = 0;

            string samohlasky = "aeiouy"; // definice znaku samohlasky
            string souhlasky = "hkrdtn"; // definice znaku souhlasky

            foreach  (char s in text)
            {
                polePismenOriginal[i] = s;
                i++;
            }

            for (int x = 0; x < text.Length; x++)
            {
                a = polePismenOriginal[x];
                a.ToString();

                if (samohlasky.Contains(a))
                {
                    if (a == 'a')
                    {
                        y = 1;
                    }
                    if (a == 'e')
                    {
                        y = 2;
                    }
                    if (a == 'i')
                    {
                        y = 3;
                    }
                    if (a == 'y')
                    {
                        y = 4;
                    }
                    if (a == 'o')
                    {
                        y = 5;
                    }
                    if (a == 'u')
                    {
                        y = 0;
                    }

                    switch (y)
                    {
                        case 0:
                            a = 'a';
                            break;
                        case 1:
                            a = 'e';
                            break;
                        case 2:
                            a = 'i';
                            break;
                        case 3:
                            a = 'y';
                            break;
                        case 4:
                            a = 'o';
                            break;
                        case 5:
                            a = 'u';
                            break;
                        default:
                            Console.WriteLine("Chyba = najit bug");
                            break;
                    }
                }
                if (souhlasky.Contains(a))
                {
                    if (a == 'h')
                    {
                        y = 1;
                    }
                    if (a == 'k')
                    {
                        y = 2;
                    }
                    if (a == 'r')
                    {
                        y = 3;
                    }
                    if (a == 'd')
                    {
                        y = 4;
                    }
                    if (a == 't')
                    {
                        y = 5;
                    }
                    if (a == 'n')
                    {
                        y = 0;
                    }

                    switch (y)
                    {
                        case 0:
                            a = 'h';
                            break;
                        case 1:
                            a = 'k';
                            break;
                        case 2:
                            a = 'r';
                            break;
                        case 3:
                            a = 'd';
                            break;
                        case 4:
                            a = 't';
                            break;
                        case 5:
                            a = 'n';
                            break;
                        default:
                            Console.WriteLine("Chyba = najit bug");
                            break;
                    }
                }
                polePismenZakodovane[x] = a;
                Console.Write("{0}", polePismenZakodovane[x]);
            }           
        }
    }
}
Nahlásit jako SPAM
IP: 31.30.172.–
16. 4. 2019   #2
-
0
-

Doporučuji prostudovat class string. Na převod (aspoň pokud si dobře pamatuji) na pole má metodu. Kromě toho by asi nebylo nutné převádět na pole a dalo by se pracovat přímo se string a jeho jednotlivými znaky. Druhá věc je hromada podmínek následovaných switchem. Myslím, že by to zvládl jen jeden switch. Napadá mne ještě použít "pole párů", kde jedna část páru je původní znak a druhá část je znak který jej nahradí. Pak stačí projít řetězec po znacích a každý výskyt původního znaku z pole párů nahradit odpovídajícím nahrazujícím znakem.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
16. 4. 2019   #3
-
0
-
Nahlásit jako SPAM
IP: 195.178.67.–
gna
~ Anonymní uživatel
1891 příspěvků
16. 4. 2019   #4
-
0
-

S takovými hodnotami stačí zjistit pozici toho znaku v tabulce. 

string declist = "yaeiou";

char dec = 'e';
int enc = declist.IndexOf(dec);
Console.WriteLine("{0} -> {1}", dec, enc);

Kdybys to mapoval složitěji, tak můžeš použít 2 tabulky. V první najdeš vstupní hodnotu a z druhé vezmeš výslednou hodnotu. 

string declist = "yaeiou";
int[] enclist = {1,3,6,10,15,21};

char dec = 'e';
int idx = declist.IndexOf(dec);
int enc = enclist[idx]; // nehlidam platnost indexu
Console.WriteLine("{0} -> {1}", dec, enc);

To je častá operace a moderní jazyky pro takové účely mají slovníky/mapy.

Dictionary<char, int> dec2enc = new Dictionary<char, int>
{
    {'y', 1},
    {'a', 3},
    {'e', 6},
    {'i', 10},
    {'o', 15},
    {'u', 21},
};

char dec = 'e';
int enc = dec2enc[dec]; // opet nehlidam platnost indexu/klice, muzes pouzit ContainsKey a/nebo TryGetValue
Console.WriteLine("{0} -> {1}", dec, enc);
Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Grafoman
17. 4. 2019   #5
-
0
-

#1 TrixCZE
přímo pro ten tvůj kod, bych vynechal zbytečnou kombinaci if + switch, když to můžeš rovnou nahradit pokud použiješ rovnou switch

    switch (a)
    {
	case 'a':
	  a = 'e';
	  break;
	case 'e':
	  a = 'i';
	  break;
...atd

ani pak nemusíš rozdělovat na souhlásky a samohlásky.

jinak existuje též převod char na číslo a pak stačí udělat si pole zástupných znaků, kde číslo znaku bude indexem do pole zástupných znaků

Nahlásit jako SPAM
IP: 185.112.167.–
MilanL+1
Grafoman
17. 4. 2019   #6
-
0
-

#5 MilanL
... je to varianta toho co radil GNA, nebo případně bez pole tu číselnou hodnotu použít ve switchi,

No a pak jsou tu ty slovníky druhá varianta od GNA jen já bych použil rovnou překladový slovník <char,char>

Nahlásit jako SPAM
IP: 185.112.167.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 52 hostů

Podobná vlákna

Vyrezanie textu s textu... — založil kotlas6667

Deformace textu — založil knezi

Pozicování textu — založil LUK4S3K

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý