abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 17:22 | Zajímavý projekt

    Max Leiter v roce 2019 zkusil zprovoznit X server na iPadu (iOS). Nyní se k tématu vrátil a s pomocí LLM a balíčkovacích nástrojů Procursus rozběhl desktop s X11 i Waylandem. Jeho balíčky jsou dostupné v repozitáři xiOS.

    |🇵🇸 | Komentářů: 6
    včera 13:33 | IT novinky

    Společnost Google Cloud dnes oznámila, že její infrastruktura a služby byly oficiálně zařazeny do Katalogu cloud computingu vedeného Digitální a informační agenturou (DIA). Tato certifikace potvrzuje, že infrastruktura a služby Google Cloud splňují přísné bezpečnostní a regulační požadavky České republiky pro provoz cloudových služeb ve veřejném sektoru.

    Ladislav Hagara | Komentářů: 4
    včera 13:11 | IT novinky

    Vůbec poprvé v historii se stát při testování digitálních služeb obrací na širokou veřejnost. Digitální a informační agentura (DIA) a Ministerstvo vnitra zvou občany k zapojení do zátěžového testu eDokladů, které od loňského podzimu prošly optimalizací aplikace a posílením infrastruktury. Test proběhne 13. srpna ve 13:00 a pro jeho úspěch bude potřeba zapojení několika desítek tisíc občanů. Zapojení do testu je zcela dobrovolné a úkol

    … více »
    Ladislav Hagara | Komentářů: 21
    včera 13:00 | Nová verze

    FireDragon je webový prohlížeč, doposud založený na Floorpu, jednom z forků Firefoxu s větším důrazem na ochranu soukromí a přizpůsobení uživatelského rozhraní. Spravuje ho člen komunity distribuce Garuda Linux. Nové vydání verze 13 opouští Floorp a přechází přímo na Firefox s patchi z LibreWolfu a vlastními úpravami. Dostupný je také na Flathubu.

    |🇵🇸 | Komentářů: 0
    včera 05:44 | Zajímavý software

    picogame (GitHub) je malý 2D herní engine pro mikrokontroléry jako RP2040, čip uvnitř kapesní konzole Picopad. Hru napíšeš v Pythonu a vyzkoušíš ji v prohlížeči nebo desktopovém simulátoru. Až bude hotová, zkopíruješ ji na podporovanou desku. Na začátku nepotřebuješ C, sestavení firmwaru ani hardware.

    Ladislav Hagara | Komentářů: 1
    29.7. 19:22 | Nová verze

    Multiplatformní prohlížeč elektronických knih KOReader byl vydán ve verzi 2026.07 "Sailing Walrus". U PDF souborů s SMask lze vyčistit pozadí. Přibyla podpora Kobo v5 nebo základní podpora OPDS 2.0.

    Ladislav Hagara | Komentářů: 0
    29.7. 14:22 | Komunita

    Společnost Valve sponzoruje a společnost Collabora portuje RADV (open source Vulkan ovladač pro AMD GPU z projektu Mesa) na Windows.

    Ladislav Hagara | Komentářů: 0
    28.7. 20:44 | Zajímavý projekt

    Starling (GitHub) je desktopové prostředí vytvořeno umělou inteligencí (s dohledem jednoho vývojáře během šesti měsíců).

    Ladislav Hagara | Komentářů: 37
    28.7. 14:22 | IT novinky

    Dne 30. června 2026 byla završena fyzická realizace projektu Czech National Quantum Communication Infrastructure (CZQCI), tedy České národní kvantové komunikační infrastruktury. Projekt byl realizován od 1. března 2023 a financován z Národního plánu obnovy částkou 121,6 milionu Kč. Cílem podpořeného projektu bylo vybudovat základy národní kvantové komunikační infrastruktury a ověřit možnosti jejího praktického využití. Mezi

    … více »
    Ladislav Hagara | Komentářů: 3
    28.7. 14:11 | IT novinky

    Město Šumperk se stalo terčem kybernetického útoku, chod úřadu je omezen. Zjišťuje se, jestli unikla nějaká data. Cílem hackerů byla městská datová síť. První útoky zaznamenali odborníci na informační technologie již v pondělí večer, závady se ale plně projevily až dnes ráno. Město událost nahlásilo Národnímu úřadu pro kybernetickou a informační bezpečnost (NUKIB).

    Ladislav Hagara | Komentářů: 1
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (7%)
     (2%)
     (18%)
     (30%)
     (5%)
     (6%)
     (2%)
     (15%)
     (23%)
    Celkem 2286 hlasů
     Komentářů: 30, poslední 3.4. 20:20
    Rozcestník


    Dotaz: zacatecnik v C - nahrazeni retezce

    19.7.2009 12:42 zacatecnik
    zacatecnik v C - nahrazeni retezce
    Přečteno: 1024×

    Ahoj vsem. Omlouvam se za lama dotaz a predem rikam, ze nejde o skolni ulohu, jen me tpo zajima. Pujcil jsem si od kamose knizku o programovani v C a rad bych se na nedco zeptal. Chtel bych nacist soubor jako vstup a nahradit hledany retezec necim jinym. V unixu se to dela programem sed, ale tady nevim.

    Tohle by melo nacist vstup a to mi chodi

    #include <stdio.h>

    main ()
    {
    int a;
    a = getchar();
    while (a !=EOF) {
    putchar(a);
    }
    }

    ale musim tam nekam "napasovat" neco jako
    if (a == 'hledany retezec') ....

    Dekuji za radu vsem, Tomas

    Odpovědi

    19.7.2009 13:22 fafsdfs
    Rozbalit Rozbalit vše Re: zacatecnik v C - nahrazeni retezce

    V zasade lze asi pouzit dva zpusoby:

    • V cyklu testovat rovnost dvou retezcu nebo podretezcu. Na to si bud napises jednouchou funkci nebo doporcujuju pouzit funkci strncmp ze string.h. (viz man strncmp, man string)
    • Aby jsi se citil jak v sedu, pak pouzij funkce z regex.h (pouziti je trochu slozitejsi, ale urcite na webu najdes ukazky).

    No a pak uz bych jen doporucil nenacitat vstup po znacich, ale rovnou po radcich pres (nestandardni funkci) getline.

    Fuky avatar 19.7.2009 14:52 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: zacatecnik v C - nahrazeni retezce
    Příloha:

    $ cat str_replace.c |./str_replace '<' '&lt' |./str_replace '>' '&gt'
    $ echo -e "abcd abcd abcd abcd\naaa\nbbb" |./str_replace b X
    aXcd aXcd aXcd aXcd
    aaa
    XXX
    

    #include <stdio.h>                                                                    
    #include <stdlib.h>                                                                   
    #include <string.h>                                                                   
    
    #define LINE_MAX 1023
    #define MATCH_MAX 1024
    
    static int str_replace(char *p_str, size_t str_max, char *p_old, char *p_new)
    {                                                                            
        int i;                                                                   
        int len;                                                                 
        int line_new_len;                                                        
        int str_len = strlen(p_str);                                             
        int old_len = 0;                                                         
        int new_len = strlen(p_new);                                             
        int seek = 0;                                                            
        char line_new[str_max+1];                                                
        char *p_match[MATCH_MAX];                                                
    
        p_match[0] = p_str;
        for (i = 1; i < MATCH_MAX; ++i) {
            p_match[i] = NULL;              
        }                                   
    
        for (i = 1; i < MATCH_MAX; ++i) {
            if ((p_match[i] = strstr(p_match[i-1]+old_len, p_old)) == NULL) {
                break;                                                       
            }                                                                
    
            if (i == 1) {
                old_len = strlen(p_old);
            }                           
        }                               
    
        line_new_len = (str_len + (new_len - old_len) * (i-1));
        if (line_new_len >= str_max) {                      
            return -1;                                         
        }                                                      
    
        memset(line_new, '\0', str_max+1);
        for (i = 1; i < MATCH_MAX; ++i) {
            if (p_match[i] == NULL) {       
                if (i > 1) {             
                    strncpy(line_new+seek, p_new, new_len);
                    seek += new_len;                       
                }                                          
                strcpy(line_new+seek, p_match[i-1]+old_len);
    
                break;
            }         
            else {    
                if ((len = p_match[i] - p_match[i-1]) > 0) {
                    if (i > 1) {
                        strncpy(line_new+seek, p_new, new_len);
                        seek += new_len;
                        len -= old_len;
                        strncpy(line_new+seek, p_match[i-1]+old_len, len);
                        seek += len;
                    }
                    else {
                        strncpy(line_new+seek, p_match[i-1], len);
                        seek += len;
                    }
                }
            }
        }
    
        memset(p_str, '\0', str_max+1);
        strncpy(p_str, line_new, str_max);
        return 0;
    }
    
    int main(int argc, char *argv[])
    {
        char line[LINE_MAX+1];
    
        if (argc != 3) {
            printf("Usage: %s OLD NEW\n", argv[0]);
            exit(EXIT_SUCCESS);
        }
    
        memset(line, '\0', LINE_MAX+1);
        while (fgets(line, LINE_MAX+1, stdin) != NULL) {
            if (str_replace(line, LINE_MAX, argv[1], argv[2]) == -1) {
                printf("output buffer is small\n");
                exit(EXIT_FAILURE);
            }
            printf("%s", line);
        }
    
        exit(EXIT_SUCCESS);
    }
    

    Fuky avatar 19.7.2009 15:36 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: zacatecnik v C - nahrazeni retezce
    Příloha:

    Ještě by se Ti mohla hodit ukázka jak pracovat s regex.

    #include <stdlib.h>                                                                                       
    #include <stdio.h>                                                                                        
    #include <string.h>                                                                                       
    #include <sys/types.h>                                                                                    
    #include <regex.h>                                                                                        
    
    /*
     * Example:
     *         
     *     YYYY-MM-DDTHH:MM:SS.sss
     *                            
     *     PATTERN = '^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2}.[0-9]*)$'
     *     STRING = '2009-07-14T20:36:01.123'                                                    
     *                                                                                           
     *     result:                                                                               
     *                                                                                           
     *         match start = 0, match stop = 23                                                  
     *         year = 2009                                                                       
     *         month = 07                                                                        
     *         day = 14                                                                          
     *         hour = 20                                                                         
     *         minute = 36                                                                       
     *         second = 01.123                                                                   
     */                                                                                          
    
    #define MATCH_SIZE 7
    #define STRING_MAX 63
    
    static void substr_copy(char *in, char *out, int begin, int end)
    {                                                               
        int size = end - begin;                                     
    
        if (size > STRING_MAX) {
            size = STRING_MAX;     
        }                          
    
        memset(out, 0, STRING_MAX+1);
        strncpy(out, in+begin, size);
    }                                
    
    int main(int argc, char *argv[])
    {                               
        int retcode;                
        char year[STRING_MAX+1];    
        char month[STRING_MAX+1];   
        char day[STRING_MAX+1];     
        char hour[STRING_MAX+1];    
        char minute[STRING_MAX+1];  
        char second[STRING_MAX+1];  
        char *pattern;              
        char *string;               
        regmatch_t match[MATCH_SIZE];
        regex_t re;                  
    
        if (argc != 3) {
            printf("Usage: %s PATTERN STRING\n", argv[0]);
            exit(EXIT_SUCCESS);                           
        }                                                 
    
        pattern = argv[1];
        string = argv[2];
    
        if ((retcode = regcomp(&re, pattern, REG_EXTENDED)) != 0) {
            fprintf(stderr, "regcomp() failure: %i\n", retcode);
            exit(EXIT_FAILURE);
        }
    
        if (regexec(&re, string, MATCH_SIZE, match, 0) == REG_NOMATCH) {
            fprintf(stderr, "regexec() pattern '%s' not found in string '%s'\n", pattern, string);
            exit(EXIT_FAILURE);
        }
    
        regfree(&re);
    
        substr_copy(string, year, match[1].rm_so, match[1].rm_eo);
        substr_copy(string, month, match[2].rm_so, match[2].rm_eo);
        substr_copy(string, day, match[3].rm_so, match[3].rm_eo);
        substr_copy(string, hour, match[4].rm_so, match[4].rm_eo);
        substr_copy(string, minute, match[5].rm_so, match[5].rm_eo);
        substr_copy(string, second, match[6].rm_so, match[6].rm_eo);
    
        printf("match start = %i, match stop = %i\n", match[0].rm_so, match[0].rm_eo);
        printf("year = %s\n", year);
        printf("month = %s\n", month);
        printf("day = %s\n", day);
        printf("hour = %s\n", hour);
        printf("minute = %s\n", minute);
        printf("second = %s\n", second);
    
        exit(EXIT_SUCCESS);
    }
    

    19.7.2009 15:49 zacatecnik
    Rozbalit Rozbalit vše Re: zacatecnik v C - nahrazeni retezce
    Diky moc vsem
    Fuky avatar 19.7.2009 16:29 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: zacatecnik v C - nahrazeni retezce
    19.7.2009 15:49 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: zacatecnik v C - nahrazeni retezce
    Příloha:
    Já bych na to šel nějak takto...

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.