IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 9. diel - Textové reťazce v jazyku C druhýkrát - Práca so znakmi

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Petr Laštovička:16.7.2016 12:26

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

 
Odpovedať
16.7.2016 12:26
Avatar
Odpovedá 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.

Odpovedať
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

}
 
Odpovedať
19.12.2016 19:47
Avatar
Odpovedá 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í

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

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

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

Chyba funkcia obsahuje_znak().

Odpovedať
19.12.2016 21:18
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Odpovedá 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.

Editované 19.12.2016 21:23
Odpovedať
19.12.2016 21:22
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Moss
Člen
Avatar
Odpovedá 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.

 
Odpovedať
20.12.2016 13:22
Avatar
Odpovedá na Moss
Libor Šimo (libcosenior):20.12.2016 13:54

Tu funkciu si si uz napisal?

Odpovedať
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);

Odpovedať
20.12.2016 14:01
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!