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

Napisal a trochu zmenil program :-)

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.

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
"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?

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

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

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
"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?

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
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
"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?

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.