NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Tereza Vudarčíková:18.4.2016 19:45

Ahoj. Doopravdy bych potřebovala pomoct s našeptávačem v C#. Jsem totální začátečník a popravdě netuším, kde začít.... Vím že musím načíst napsaný text pomocí string s = Console.ReadLine() a že bych ho měla nějak porovnat se slovy z nějakého souboru a to vše v cyklu. Ale doopravdy netuším, jak a co s tím... pomohli by ste mi prosím někdo :)?

 
Odpovědět
18.4.2016 19:45
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na Tereza Vudarčíková
Petr Čech:18.4.2016 20:25

Budeš muset specifikovat, jak se to má přesně chovat.
Předpokládám, že to chceš dělat v konzoli, ale nejsem si úplně jistý, že to jde...
BTW, k čemu to přesně je?

Nahoru Odpovědět
18.4.2016 20:25
the cake is a lie
Avatar
Odpovídá na Petr Čech
Tereza Vudarčíková:18.4.2016 20:42

" Program bude načítat znaky zapsané do konzole a bude načítat slova ze souboru (slovníku), která se zatím shodují se zadanými znaky, a bude uživateli napovídat, jaká slova jsou k dispozici. " To mám jako zadání. A ano, je to konzole.

 
Nahoru Odpovědět
18.4.2016 20:42
Avatar
Lukáš Fusek
Tvůrce
Avatar
Lukáš Fusek:18.4.2016 21:30

Mohlo by to asi vypadat nějak takto:

using System;
using System.Collections.Generic;

namespace Naseptavac
{
    class Program
    {
        static void Main()
        {
            // slovíčka načtená ze souboru (třeba ve formátu CSV)
            string[] slovicka = NactiSlovicka("kolo;auto;loď;kůň");
            // vstup uživatele (zadávané znaky se budou ukládat do této proměnné)
            string vstup = "";
            // tato proměnná v sobě bude uchovávat podobné slovíčka
            string[] nalezeneSlovicka;
            // proměnná pro aktuálně zadaný znak
            char znak;
            // Cyklus probíhá, dokud není stiskut ESCAPE
            while ((znak = Console.ReadKey(true).KeyChar) != (char)ConsoleKey.Escape)
            {
                // znak je přidán
                if (znak != (char)ConsoleKey.Backspace)
                    vstup += znak;
                // Pokud je zmáčknut backspace, je umazán jeden znak
                else if (vstup.Length > 0)
                    vstup = vstup.Remove(vstup.Length - 1);
                // Načte pole nalezených podobných slovíček
                nalezeneSlovicka = NalezeneSlovicka(vstup, slovicka);
                // Vypíše nalezené slovíčka
                Vypis(vstup, nalezeneSlovicka);
            }
        }
        // Metoda vypíše do konzole nalezené výsledky + vstup
        static void Vypis(string vstup, string[] nalezeneSlovicka)
        {
            Console.Clear();
            // Tento řádek vypisuje navrhované slova
            if (nalezeneSlovicka.Length > 0)
                Console.WriteLine("Podobná slova: " + string.Join(", ", nalezeneSlovicka));
            else
                Console.WriteLine("Nenalezena žádná podobná slova...");
            // Tento řádek vypisuje zadávané znaky/slovo
            Console.Write(vstup);
        }
        // Metoda načte slovíčka ze souboru
        static string[] NactiSlovicka(string slovickaCSV)
        {
            // slovíčka načtené ze souboru
            return slovickaCSV.Split(';');
        }
        // Metoda vyhledá podobná slovíčka a vratí je v poli strignů
        static string[] NalezeneSlovicka(string vstup, string[] slovicka)
        {
            List<string> vrat = new List<string>();
            // Pokud je zadané nějaké písmeno, začne hledat shodu
            if (vstup.Length > 0)
            {
                for (int i = 0; i < slovicka.Length; i++)
                {
                    if (slovicka[i].StartsWith(vstup))
                    {
                        vrat.Add(slovicka[i]);
                    }
                }
            }
            // Vrátí všechny nalezené slovíčka
            return vrat.ToArray();
        }
    }
}

Jsem v celku vzato taky začátečník, takže to není nic moc optimalizované. (pokud bude slovník opravdu velký, vyhledávání podobných slov bude při každém stisku klávesy velmi dlouhé) Navíc je to hrubý náčrt, který jsem vypotil za 10 minut. Dá se však od toho odpíchnout. :-)

Editováno 18.4.2016 21:31
 
Nahoru Odpovědět
18.4.2016 21:30
Avatar
Odpovídá na Lukáš Fusek
Tereza Vudarčíková:23.4.2016 19:58

Díky moc!!!! Mě jde především o to začít... Nemám problém s pochopením příkazů, vlastností, co dělá co, ale nějak mi nejde prostě něco jen tak napsat. Asi časem :)... Doufám :D

 
Nahoru Odpovědět
23.4.2016 19:58
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 5 zpráv z 5.