Avatar
Tereza Vudarčíková:

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. dubna 19:45
Avatar
Odpovídá na Tereza Vudarčíková
Petr Čech (czubehead):

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. dubna 20:25
Why so serious? -Joker
Avatar
Odpovídá na Petr Čech (czubehead)
Tereza Vudarčíková:

" 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. dubna 20:42
Avatar
Shakul
Redaktor
Avatar
Shakul:

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. dubna 21:31
 
Nahoru Odpovědět 18. dubna 21:30
Avatar
Odpovídá na Shakul
Tereza Vudarčíková:

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  +2 23. dubna 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.