NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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
Avatar
Petr Laštovička:16.7.2016 12:26

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

 
Odpovědět
16.7.2016 12:26
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
16.7.2016 12:31
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

}
 
Odpovědět
19.12.2016 19:47
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
19.12.2016 20:42
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
19.12.2016 20:44
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
19.12.2016 21:18
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
19.12.2016 21:22
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.

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

Tu funkciu si si uz napisal?

Odpovědět
20.12.2016 13:54
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
20.12.2016 14:01
Aj tisícmíľová cesta musí začať jednoduchým krokom.
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.