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
Moss
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
Moss:22.12.2016 15:50

Napisal a trochu zmenil program :-)

 
Odpovědět
22.12.2016 15:50
Avatar
Tomáš Lipert:5.12.2018 12:20

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv) {
int i;
int pom;
char veta[151];
printf("Zadejte text:");

scanf("%150[^\n]s", veta);
pom= strlen(veta);
for (i = 0; pom-i+1 != '\0'; i++)

printf("%c-", veta[pom -i]);

return (EXIT_SUCCESS);
}

Ahoj toto je program, který vypíše větu, kterou definujete a napíše jí pozpátku.
Chci se zeptat, jestli by to nešlo nějak jinak. předem děkuji za odpovědi.

 
Odpovědět
5.12.2018 12:20
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Tomáš Lipert
DarkCoder:5.12.2018 21:28
#include <stdio.h>
#include <string.h>

int main(void) {
        char *str = "Tento retezec bude vypsan pozpatku.";
        for (int i = strlen(str)-1; i >= 0; i--) putchar(*(str + i)); //C99 standart

        return(0);
}
Odpovědět
5.12.2018 21:28
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Patrik Pastor:24.8.2019 21:31

for (i = 0; s[i] != '\0'; i++)
3 {
2 s[i] = s[i] - posun;
1 }
18 *(strchr(s, 'z')) = 'a';

Kde mam chybu s tim pointerem, nebo proc mi to kompiler terminuje? vzdyt jsem chtel ten pointer strchr() dereferencovat a adrese na kterou ukazuje ('z') priradit hodnotu 'a' , proc to nemuzu?

 
Odpovědět
24.8.2019 21:31
Avatar
Odpovídá na DarkCoder
Patrik Pastor:24.8.2019 21:31

ted jsem zmateny jak funguje to dereferencovani, kdyz mi kod vyse nefunguje

 
Odpovědět
24.8.2019 21:31
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Patrik Pastor
DarkCoder:24.8.2019 22:06

Jak funguje dereferencování, podívej na následující příklad:

#include <stdio.h>

int main(void) {
        int i = 0, j, *pi = &i;

        *pi = 10; // přiřazení hodnoty 10 proměnné i nepřímo
        printf("%d\n", *pi); // výpis proměnné i nepřímo

        i = 100; // přiřazení hodnoty 100 proměnné i přímo
        printf("%d\n", i); // výpis proměnné i přímo

        j = *pi; // přiřazení proměnné i proměnné j nepřímo
        printf("%d\n", j); // výpis proměnné j přímo

        return 0;
}

Dereferencováním ukazatele na typ je získána hodnota proměnné, na kterou ukazatel ukazuje.
Lze použít jak na levé tak pravé straně přiřazovacího příkazu.

Editováno 24.8.2019 22:07
Odpovědět
24.8.2019 22:06
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Patrik Pastor:24.8.2019 22:29

tak proc to nefungovalo v mem pripade? kde jsem mel *strchr(s,'z') = 'a', kde s je pole. Taky jsem chtel ziskat hodnotu adresy charu 'z', ale spadlo mi to, proc, kdyz delam to co jsi ted vyse popsla?

 
Odpovědět
24.8.2019 22:29
Avatar
Patrik Pastor:24.8.2019 22:32

for (i = 0; s[i] != '\0'; i++)
{
s[i] = s[i] - posun;
}
*(strchr(s, 'z')) = 'a';

Editováno 24.8.2019 22:32
 
Odpovědět
24.8.2019 22:32
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Patrik Pastor
DarkCoder:24.8.2019 23:07

Třeba proto, že strchr() je funkce z knihovny string.h a nikoli proměnná.

Jak se pracuje s dereferencováním u pole ukazuje následující příklad:

#include <stdio.h>

#define SIZE 10

int main(void) {
        int pole[SIZE], *pp = pole;

        // přiřazení hodnoty 10 druhému prvku pole 4 způsoby
        pole[1] = 10; // indexace pole
        *(pole + 1) = 100; // konstatní ukazatel
        *(pp + 1) = 10; // ukazatel
        pp[1] = 100; // indexace ukazatele

        // výpis hodnoty druhého prvku pole 4 způsoby
        printf("%d\n", pole[1]);
        printf("%d\n", *(pole + 1));
        printf("%d\n", *(pp + 1));
        printf("%d\n", pp[1]);

        return 0;
}

Zde je vidět, jak úzce jsou pole a ukazatele svázány.

Odpovědět
24.8.2019 23:07
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Patrik Pastor:25.8.2019 2:24

a jak by to bylo konkretne s mym prikladem s strchr()? prirazeni hodnot poli umim taky, ale kdyz je funkce typu *chat, tak proc ji nemuzu dereferencovat a priradit ji hodnotu?

 
Odpovědět
25.8.2019 2:24
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.