POSLEDNÍ ŠANCE: Halloweenská akce brzy končí. Získej 66 % extra kreditů zdarma při nákupu od 1199 kreditů s promo kódem NEBOJSEIT66. Zjisti více:
NOVINKA: Začni v IT jako webmaster s komplexním akreditovaným online kurzem Tvůrce WWW stránek. Zjisti více:

Diskuze – Lekce 9 - Textové řetězce v jazyce C podruhé - Práce se znaky

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
Nejnovější komentáře jsou na konci poslední stránky.
Avatar
Petr Laštovička:16.7.2016 12:26

K hledání znaku uvnitř řetězce lze použít funkci strchr.

Avatar
Odpovídá na Petr Laštovička
Patrik Valkovič:16.7.2016 12:31

strchr vrací ukazatel, a ty ani v seriálu o základech nejsou probrány (zatímco funkce ano), proto jsem dal přednost této implementaci.

Odpovědět
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Moss
Člen
Avatar
Moss:19.12.2016 19:47

Zdravím,
Skúšal som tu analýzu výskyvu vo vete s zadávaním vety od uživateľa, ale pri spustení to vracia chybnú hodnotu.
zdrojový kód:

int main(void)
{
    int pocetsamohlasok = 0;
    int pocetspoluhlasok = 0;    //deklaracia premnennych
    int pocetcisiel = 0;
    int pocetostatnych = 0;
    char analyza[100];
    char samohlasky[] = "aeiouyAEIOUY";
    char spoluhlasky[] = "bcdfghijklmnpqrstvwxzBCDFGHIJKLMNPQtSTVWXZ";
    char cisla[] = "0123456789";
    printf("Zadajte vetu alebo slovo: ");
    scanf(" %99c", &analyza);                           //vstup uzivatela
    for (int i = 1; analyza[i] != '\0'; i++)
    {
        if (obsahuje_znak(analyza[i], samohlasky) == 1)
        {
            pocetsamohlasok++;
        }
        else if (obsahuje_znak(analyza[i],spoluhlasky) == 1)   //hlavny cyklus
        {
            pocetspoluhlasok++;
        }
        else if (obsahuje_znak(analyza[i],cisla) == 1)
        {
            pocetcisiel++;
        }
        else
        {
            pocetostatnych++;
        }
    }
    printf("Samohlasok je: %d, spoluhlasok je: %d, cisiel je: %d a niealfanumerickych znakov je: %d\n",psa,psp,pc,pd); //vypis hodnot

}
Avatar
Odpovídá na Moss
Petr Štechmüller:19.12.2016 20:42

Ahoj, našel jsem tam zatím tří chyby:

  1. Když si nadeklaruješ pole charů, tak ho musíš před použitím vymazat, protože nemáš zaručeno, že to bude prázdný.
  2. Na řádku s načítáním
scanf(" %99c", &analyza);

už nedávej

&analyza

ale pouze

analyza

protože char[] je vlastně pointer.

3. Na posledním řádku se odkazuješ na proměnný, které neexistují

Odpovědět
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Moss
Petr Štechmüller:19.12.2016 20:44

4. Pole se indexuje v C-like jazycích vždy od 0!

Odpovědět
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Odpovídá na Moss
Libor Šimo (libcosenior):19.12.2016 21:18

Chyba funkcia obsahuje_znak().

Odpovědět
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovídá na Moss
Libor Šimo (libcosenior):19.12.2016 21:22

Nemas deklarovane premenne psa,psp,pc,pd, navyse ich nepotebujes. Treba pouzit tie deklarovane, napr. pocetcisel.
Ten kod si len od niekoho skopcil, ale si sa nad nim nezamyslel, alebo tomu vobec nerozumies.

Editováno 19.12.2016 21:23
Odpovědět
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Moss
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
Moss:20.12.2016 13:22

Pardon, tym premennym som zabudol zmenit meno. Najprv som tam mal premenne psa,psp,pc a pd, ale som zmenil ich nazvy na pocetsamohlasok... Dakujem za upozornenie.

Avatar
Odpovídá na Moss
Libor Šimo (libcosenior):20.12.2016 13:54

Tu funkciu si si uz napisal?

Odpovědět
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Libor Šimo (libcosenior):20.12.2016 14:01

/** funkcia kontoluje, ci sa znak nachadza v poli znakov

  • @param pole_znakov
  • @param znak
  • @return true/false (1/0)

*/
int obsahuje_znak(char *pole_znakov, char znak);

Odpovědět
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Nejnovější komentáře jsou na konci poslední stránky.
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 35.