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í
×
    dnes 06:11 | Nová verze

    Společnost Valve aktualizovala přehled o hardwarovém a softwarovém vybavení uživatelů služby Steam. Podíl uživatelů Linuxu dosáhl 3,58 %. Nejčastěji používané linuxové distribuce jsou Arch Linux, Linux Mint a Ubuntu. Při výběru jenom Linuxu vede SteamOS Holo s 26,32 %. Procesor AMD používá 67,43 % hráčů na Linuxu.

    Ladislav Hagara | Komentářů: 0
    dnes 05:55 | IT novinky

    V Las Vegas probíhá veletrh CES (Consumer Electronics Show, Wikipedie). Firmy představují své novinky. Například LEGO představilo systém LEGO SMART Play: chytré kostky SMART Brick, dlaždičky SMART Tagy a SMART minifigurky. Kostka SMART Brick dokáže rozpoznat přítomnost SMART Tagů a SMART minifigurek, které se nacházejí v její blízkosti. Ty kostku SMART Brick aktivují a určí, co má dělat.

    Ladislav Hagara | Komentářů: 0
    včera 18:33 | Bezpečnostní upozornění

    Vládní CERT (GovCERT.CZ) upozorňuje (𝕏) na kritickou zranitelnost v jsPDF, CVE-2025-68428. Tato zranitelnost umožňuje neautentizovaným vzdáleným útočníkům číst libovolné soubory z lokálního souborového systému serveru při použití jsPDF v prostředí Node.js. Problém vzniká kvůli nedostatečné validaci vstupu u cest k souborům předávaných několika metodám jsPDF. Útočník může zneužít tuto chybu k exfiltraci citlivých

    … více »
    Ladislav Hagara | Komentářů: 2
    včera 16:22 | Komunita

    V úterý 13. ledna 2025 se v pražské kanceláři SUSE v Karlíně uskuteční 5. Mobile Hackday, komunitní setkání zaměřené na Linux na mobilních zařízeních, kernelový vývoj a související infrastrukturu. Akci pořádá David Heidelberg.

    … více »
    lkocman | Komentářů: 0
    včera 16:00 | Pozvánky

    Už je 14 dní zbývá do začátku osmého ročníku komunitního setkání nejen českých a slovenských správců sítí CSNOG 2026. Registrace na akci je stále otevřená, ale termín uzávěrky se blíží. I proto organizátoři doporučují, aby se zájemci přihlásili brzy, nejlépe ještě tento týden.

    … více »
    VSladek | Komentářů: 0
    včera 02:22 | Pozvánky

    Rok 2026 sotva začal, ale už v prvním týdnu se nashromáždilo nezvykle mnoho zajímavostí, událostí a zpráv. Jedno je ale jisté - už ve středu se koná Virtuální Bastlírna - online setkání techniků, bastlířů a ajťáků, kam rozhodně doražte, ideálně s mikrofonem a kamerou a zapojte se do diskuze o zajímavých technických tématech.

    Dějí se i ne zcela šťastné věci – zdražování a nedostupnost RAM a SSD, nedostatek waferů, 3€ clo na každou položku z Číny … více »
    bkralik | Komentářů: 0
    5.1. 22:00 | Komunita

    Vývojáři GNOME a Firefoxu zvažují ve výchozím nastavení vypnutí funkce vkládání prostředním tlačítkem myši. Zdůvodnění: "U většiny uživatelů tento X11ism způsobuje neočekávané chování".

    Ladislav Hagara | Komentářů: 11
    5.1. 15:22 | Nová verze

    Nástroj pro obnovu dat GNU ddrescue (Wikipedie) byl vydán v nové verzi 1.30. Vylepšena byla automatická obnova z disků s poškozenou čtecí hlavou.

    Ladislav Hagara | Komentářů: 0
    5.1. 12:55 | IT novinky

    Protokol IPv6 má již 30 let. První návrh specifikace RFC 1883 je z prosince 1995.

    Ladislav Hagara | Komentářů: 14
    5.1. 01:55 | IT novinky

    Byli vyhlášeni vítězové ocenění Steam Awards 2025. Hrou roku a současně nejlepší hrou, která vám nejde, je Hollow Knight: Silksong.

    Ladislav Hagara | Komentářů: 2
    Které desktopové prostředí na Linuxu používáte?
     (1%)
     (4%)
     (0%)
     (10%)
     (24%)
     (6%)
     (6%)
     (3%)
     (10%)
     (51%)
    Celkem 231 hlasů
     Komentářů: 5, poslední dnes 10:35
    Rozcestník

    Dotaz: zacatecnik v C - nahrazeni retezce

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

    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.