abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    včera 18:44 | Nová verze

    Byl vydán Mozilla Firefox 125.0.1, první verze z nové řady 125. Přehled novinek v poznámkách k vydání, poznámkách k vydání pro firmy a na stránce věnované vývojářům. Vypíchnout lze podporu kodeku AV1 v Encrypted Media Extensions (EME). Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 125.0.1 je již k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 16:44 | Nová verze

    Valkey, tj. svobodný fork již nesvobodného Redisu, byl vydán v první stabilní verzi 7.2.5.

    Ladislav Hagara | Komentářů: 0
    včera 15:11 | IT novinky

    Společnost Espressif Systems oznámila, že rodinu SoC ESP32 brzy rozšíří o ESP32-H4 s IEEE 802.15.4 a Bluetooth 5.4 (LE) s podporou protokolů Thread 1.3, Zigbee 3.0 a Bluetooth Mesh 1.1.

    Ladislav Hagara | Komentářů: 3
    včera 13:11 | Zajímavý software

    Kevin Bentley zveřejnil na GitHubu zdrojové kódy počítačové hry Descent 3 z roku 1999: "Někdo se nedávno zeptal, zda budou zveřejněny zdrojové kódy Descent 3. Oslovil jsem svého bývalého šéfa (Matt Toschlog) z Outrage Entertainment a ten mi to povolil. Budu pracovat na tom, aby se to znovu rozběhlo a hledám spolusprávce." [Hacker News]

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

    Byla vydána verze 0.81 telnet a ssh klienta PuTTY. Opravena je kritická bezpečnostní chyba CVE-2024-31497 obsažena ve verzích 0.68 až 0.80. Používáte-li klíč ECDSA NIST P521 a použili jste jej v PuTTY nebo Pageantu, považujte jej za kompromitovaný.

    Ladislav Hagara | Komentářů: 0
    15.4. 21:44 | Komunita

    Hra MineClone2 postavena nad voxelovým herním enginem Minetest byla přejmenována na VoxeLibre.

    Ladislav Hagara | Komentářů: 0
    15.4. 19:11 | IT novinky

    Společnosti Avast Software s.r.o. byla pravomocně uložena pokuta ve výši 351 milionů Kč. Tu uložil Úřad pro ochranu osobních údajů za neoprávněné zpracování osobních údajů uživatelů jejího antivirového programu Avast a jeho rozšíření internetových prohlížečů (Browser Extensions), k čemuž docházelo prokazatelně po část roku 2019.

    … více »
    Ladislav Hagara | Komentářů: 9
    15.4. 15:55 | Zajímavý článek

    Bylo vydáno do češtiny přeložené číslo 714 týdeníku WeeklyOSM přinášející zprávy ze světa OpenStreetMap.

    Ladislav Hagara | Komentářů: 0
    15.4. 15:44 | Pozvánky

    V sobotu 20. dubna lze navštívit Maker Faire Jihlava, festival plný workshopů, interaktivních činností a především nadšených a zvídavých lidí.

    Ladislav Hagara | Komentářů: 0
    15.4. 14:44 | Zajímavý software

    Knihovna pro potlačení šumu RNNoise byla vydána ve verzi 0.2. Kvalitu potlačení lze vyzkoušet na webovém demu.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (62%)
     (13%)
     (2%)
     (23%)
    Celkem 448 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: Problém v C

    7.9.2009 22:02 jirka36 | skóre: 2
    Problém v C
    Přečteno: 947×

    dobrý den, potřeboval bych poradit algorytmus na nahrazení více mezer pouze jednou...tzn. kdyz na vstup zadam: ahoj      jak      se   vede. tak aby to vypsalo ahoj jak se vede

    Odpovědi

    7.9.2009 22:23 dad
    Rozbalit Rozbalit vše Re: Problém v C

    man strtok

    7.9.2009 22:27 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
    Rozbalit Rozbalit vše Re: Problém v C
    algorytmus
    Začíná to pěkně ;-).
    nahrazení více mezer
    Co třeba číst znak po znaku a pokud předchozí i současný znak jsou oba mezera, tak nevypsat nic a jinak vypsat ten současný?
    I am always ready to learn although I do not always like to be taught. (W. Churchill)
    7.9.2009 22:35 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    Domácí úkol? :)
    #define DELKARETEZCE 20
    
    void StripSpaces(char * retezec);
    
    int main()
    {
     char * retezec;
     retezec=(char *)malloc(DELKARETEZCE * sizeof(retezec);
     scanf(%s,retezec);
     StripSpaces(retezec);
     return 0;
    }
    
    void StripSpaces(char * retezec)
    {
     char * buffer;
     char PredchoziZnak = 'a';
     int i = 0;
     buffer = (char *)malloc(DELKARETEZCE * sizeof(buffer);
     for(i = 0; i < DELKARETEZCE; i++)
     {
      if(PredchoziZnak != ' ') buffer[0] = retezec[0];
      PredchoziZnak = retezec[0];
     }
    }
    
    Nic jednodussiho me nenapadlo...
    7.9.2009 22:36 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    A chyběj mi tam free(), už je moc pozdě.
    7.9.2009 22:43 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    #define DELKARETEZCE 20
    
    void StripSpaces(char * retezec);
    
    int main()
    {
     char * retezec;
     retezec=(char *)malloc(DELKARETEZCE * sizeof(retezec);
     scanf(%s,retezec);
     StripSpaces(retezec);
     free(retezec);
     return 0;
    }
    
    void StripSpaces(char * retezec)
    {
     char * buffer;
     char PredchoziZnak = 'a';
     int i = 0;
     buffer = (char *)malloc(DELKARETEZCE * sizeof(buffer);
     for(i = 0; i < DELKARETEZCE; i++)
     {
      if(PredchoziZnak != ' ' && buffer[i] != ' ') buffer[i] = retezec[i];
      PredchoziZnak = retezec[i];
     }
     strcpy(retezec,buffer);
     free(buffer);
    }
    
    7.9.2009 22:46 Vojtěch Horký | skóre: 39 | blog: Vojtův zápisník | Praha
    Rozbalit Rozbalit vše Re: Problém v C
    StripSpaces(retezec);
    free(retezec);
    
    A taky by nebylo na škodu tu krásu (myslim, ten řetězec bez násobných mezer) vypsat :-D. Ale to nechme laskavému čtenáři k vyřešení.
    I am always ready to learn although I do not always like to be taught. (W. Churchill)
    7.9.2009 22:55 Let_Me_Be | skóre: 20 | blog: cat /proc/idea/current | Brno
    Rozbalit Rozbalit vše Re: Problém v C
    Trochu zbytecna cela ta funkce na odstranovani mezer, kdyz %s ignoruje mezery :-D
    Linked in profil - Můj web - Nemůžete vyhrát hádku s blbcem. Nejdřív vás stáhne na svoji úroveň a pak ubije zkušenostmi.
    7.9.2009 23:00 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    Rejpalové si nahradí scanf() gets() :-D.
    8.9.2009 09:11 volca
    Rozbalit Rozbalit vše Re: Problém v C

    Tohle by nefungovalo... Je potreba mit druhej citac na ten cilovej buffer.

    #define DELKARETEZCE 20
    
    void StripSpaces(char * retezec);
    
    int main()
    {
     char * retezec;
     retezec=(char *)malloc(DELKARETEZCE * sizeof(retezec);
     scanf(%s,retezec);
     StripSpaces(retezec);
     free(retezec);
     return 0;
    }
    
    void StripSpaces(char * retezec)
    {
     char * buffer;
     char PredchoziZnak = 'a';
     int i = 0; 
     int j = 0;
     buffer = (char *)malloc(DELKARETEZCE * sizeof(buffer);
     for(i = 0; i < DELKARETEZCE; i++)
     {
      if(PredchoziZnak != ' ' && buffer[i] != ' ') buffer[j++] = retezec[i];
      PredchoziZnak = retezec[i];
     }
     strcpy(retezec,buffer);
     free(buffer);
    }
    
    e.lisak avatar 8.9.2009 06:52 e.lisak | skóre: 23
    Rozbalit Rozbalit vše Re: Problém v C
    while, strstr, strcpy + nejake ty zavorky a par pismenek okolo
    8.9.2009 08:27 R
    Rozbalit Rozbalit vše Re: Problém v C
    Bez strcpy(), malloc() a free():
    #include <stdio.h>
    #include <string.h>
    
    char *strip_spaces(char *s) {
        int i, pos = 0;
        for (i = 0; i < strlen(s); i++) {
            s[pos] = s[i];
            if (s[i] != ' ' | (s[i] == ' ' && (i < 1 || s[i-1] != ' ')))
                pos++;
        }
        s[pos] = 0;
        return s;
    }
    
    int main(void) {
        char *s = strdup(" toto   je retazec  ");
        printf("'%s'\n", strip_spaces(s));
    }
    
    8.9.2009 08:58 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Nikdy nemodifikujte vstupní argument, zvlášť když se tváříte, že vracíte nějakou návratovou hodnotu.
    In Ada the typical infinite loop would normally be terminated by detonation.
    8.9.2009 10:52 R
    Rozbalit Rozbalit vše Re: Problém v C
    sprintf() tiez meni argument a svet sa nezrutil. Namiesto "char *" si tam mozes dat "int" a na koniec "return pos" namiesto "return s". Vsetko zalezi od toho, na co ma ta funkcia sluzit.

    Akurat je vhodne napisat do komentara, ze to modifikuje s (keby si to niekto nahodou v tych 8 riadkoch nevsimol).
    8.9.2009 10:59 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    sprintf() tiez meni argument a svet sa nezrutil.
    Funkce sprintf má jasně dáno, že do toho argumentu bude zapisovat, Váš příklad je zavádějící k printf("`%s' -> `%s'\n", s, strip_spaces(s)), ale ouha.
    Akurat je vhodne napisat do komentara, ze to modifikuje s (keby si to niekto nahodou v tych 8 riadkoch nevsimol).

    To je určitě vhodné, ba přímo nutné. A taky je jedna věta v lidském jazyce kratší a srozumitelnější, než 8 řádek v C, které nemusí být navíc vždy k dispozici.
    In Ada the typical infinite loop would normally be terminated by detonation.
    8.9.2009 11:12 R
    Rozbalit Rozbalit vše Re: Problém v C
    Ten moj kod ma jeden vykonnostny problem: v kazdom precohode cyklom sa robi znovu strlen(), pretoze retazec sa modifikuje. Je to potom pomalsie ako kod od rhodosa. Ked sa vsak strlen() vyberie pred cyklus, dost sa to zrychli a je to potom rychlejsie.

    Maly benchmark (10 000 000 prechodov):

    O0:

    ja: 12.922s, po oprave: 6.632s

    rhodos: 7.587s

    O1:

    ja: 26.682s, po oprave: 3.870s

    rhodos: 12.938s

    (dost divna optimalizacia!)

    O2:

    ja: 9.498s, po oprave: 2.743s (!!)

    rhodos: 7.397s
    8.9.2009 11:52 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Jelikož bych k těm měřením odhadoval rozptyl tak 1s, tak druhé a třetí nevypovídají proti sobě nic.
    In Ada the typical infinite loop would normally be terminated by detonation.
    8.9.2009 13:06 R
    Rozbalit Rozbalit vše Re: Problém v C
    Co druhe a tretie nevypoveda nic?

    Inak ten rozptyl je "trochu" lepsi ako 1s:
    $ for i in `seq 1 10`; do time ./a.out; done
    
    real    0m2.720s
    user    0m2.572s
    sys     0m0.024s
    
    real    0m2.678s
    user    0m2.600s
    sys     0m0.000s
    
    real    0m2.692s
    user    0m2.612s
    sys     0m0.008s
    
    real    0m2.691s
    user    0m2.604s
    sys     0m0.008s
    
    real    0m2.675s
    user    0m2.600s
    sys     0m0.016s
    
    real    0m2.697s
    user    0m2.608s
    sys     0m0.004s
    
    real    0m2.685s
    user    0m2.600s
    sys     0m0.012s
    
    real    0m2.692s
    user    0m2.596s
    sys     0m0.004s
    
    real    0m2.690s
    user    0m2.596s
    sys     0m0.008s
    
    real    0m2.688s
    user    0m2.600s
    sys     0m0.000s
    
    
    8.9.2009 15:43 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Zkuste to na vzorku 2000 spuštění, pokud možno ne hned po sobě, a dejte výsledky do grafu, a pak uvidíme.
    In Ada the typical infinite loop would normally be terminated by detonation.
    8.9.2009 15:59 R
    Rozbalit Rozbalit vše Re: Problém v C
    A vysledkom ma byt co? Bude tam 1900 cisiel okolo 2.6-2.7s a zvysok nejake nezmysly (kedze na PC cely den robim).
    8.9.2009 20:02 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Statistika je o těch nesmyslech.
    In Ada the typical infinite loop would normally be terminated by detonation.
    8.9.2009 23:38 R
    Rozbalit Rozbalit vše Re: Problém v C
    Preco sem pleties statistiku? Ja nemeram priemernu dobu vykonania programu na bezne zatazenom systeme, ale dobu vykonania programu na nezatazenom systeme.
    9.9.2009 09:43 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    priemernu
    Protože ji sem pleteš ty? :-)
    In Ada the typical infinite loop would normally be terminated by detonation.
    8.9.2009 09:05 Sten Fil | skóre: 4
    Rozbalit Rozbalit vše Re: Problém v C

    void vyhozeni_mezer (const char* input, char* output)
    {
        int output_size = 0;

        for (int i = 0; i < strlen (input); i++)
        {
            if (input[i] != ' ')
            {
                output[output_size] = input[i];
                output_size++;
            }
            else if ((output_size == 0) ||
                (output[output_size] != ' '))
            {
                output[output_size] = input[i];
                output_size++;
            }
        }

        output[output_size] = 0;

        return;
    }

    8.9.2009 09:11 Sten Fil | skóre: 4
    Rozbalit Rozbalit vše Re: Problém v C

    oprava:

    else if ((output_size == 0) ||
             (output[output_size - 1] != ' '))

    8.9.2009 11:28 Sten Fil | skóre: 4
    Rozbalit Rozbalit vše Re: Problém v C

    Pro replace by melo stacit poslat do input i output stejny ukazatel.

    Josef Kufner avatar 9.9.2009 00:41 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Problém v C
    Co třeba něco jako toto: ?
    
    char *strdup_no_dup_space(const char *src)
    {
      char *dest = (char *) malloc(strlen(src));
      char *p_src = src, *p_dest = dest;
    
      if (dest && (*p_dest = *p_src++)) {
        while ((*p_dest == ' ' && *p_src == ' ') || (*(++p_dest) = *p_src))
          p_src++;
      }
      return dest;
    }
    
    
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 12:10 dark
    Rozbalit Rozbalit vše Re: Problém v C

    A co null terminator?

    Josef Kufner avatar 9.9.2009 13:38 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Problém v C
    Kopírování probíhá před kontrolou, takže se zkopíruje zakončovací nula a pak to teprve skončí.
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 13:55 dark
    Rozbalit Rozbalit vše Re: Problém v C

    Nebudu napínat, pro chudinku nulu nemusí být místo :)

    Josef Kufner avatar 9.9.2009 14:06 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Problém v C
    Aaaaa… taková trapná chyba… tak znovu a lépe. A jako bonus tomu přidáme kontrolu na NULL na vstupu aby to nepadalo na hubu a odstraníme jeden warning.
    char *strdup_no_dup_space(const char *src)
    {
      if (src == NULL)
        return NULL;
    
      char *dest = (char *) malloc(strlen(src) + 1);
      char *p_src = src;
      const char *p_dest = dest;
    
      if (dest && (*p_dest = *p_src++)) {
        while ((*p_dest == ' ' && *p_src == ' ') || (*(++p_dest) = *p_src))
          p_src++;
      }
      return dest;
    }
    Teď už by to mělo být dokonalé :-D
    Hello world ! Segmentation fault (core dumped)
    Josef Kufner avatar 9.9.2009 14:08 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Problém v C
    Jsem já to ale kus vola.
    char *strdup_no_dup_space(const char *src)
    {
      if (src == NULL)
        return NULL;
    
      char *dest = (char *) malloc(strlen(src) + 1);
      const char *p_src = src;
      char *p_dest = dest;
    
      if (dest && (*p_dest = *p_src++)) {
        while ((*p_dest == ' ' && *p_src == ' ') || (*(++p_dest) = *p_src))
          p_src++;
      }
      return dest;
    }
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 21:13 merlin111 | skóre: 15
    Rozbalit Rozbalit vše Re: Problém v C
    Může někdy nastat že '\0' se nerovná 0 ?
    Každá ulice je slepá jen do té doby, než si opatříš buldozer.
    Josef Kufner avatar 9.9.2009 22:16 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Problém v C
    Ne.

    Tuším že důvod se jmenuje „implicitní typové konverze“ nebo tak nějak.
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 22:45 merlin111 | skóre: 15
    Rozbalit Rozbalit vše Re: Problém v C
    Já vím, ale mě spíš šlo o to jestli fakt neexistují nějaké ne ASCII systémy kde platí třeba '\0' = 5. Tedy otázka absolutní /úchylné :-)/ přenositelnosti.
    Každá ulice je slepá jen do té doby, než si opatříš buldozer.
    Josef Kufner avatar 9.9.2009 23:52 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Problém v C
    Pokud napíšeš '\5', tak to znamená byte o hodnotě pět – to lomítko číslo přímo udává hodnotu. Pokud napíšeš '5', tak to závisí na tom, jakou ascii tabulku systém používá.
    Hello world ! Segmentation fault (core dumped)
    10.9.2009 03:52 dark
    Rozbalit Rozbalit vše Re: Problém v C

    Někoho by mohlo zaskočit třeba toto:

      int isEqual1 = (int)('\377' == 255);
      int isEqual2 = ((int)'\377' == 255);
      int isEqual3 = ((unsigned int)'\377' == (unsigned int)255);
      int isEqual4 = ((unsigned int)((unsigned char)'\377') == (unsigned int)255);
    
      printf("isEqual1==%d\n", isEqual1);
      printf("isEqual2==%d\n", isEqual2);
      printf("isEqual3==%d\n", isEqual3);
      printf("isEqual4==%d\n", isEqual4);
    
    
    9.9.2009 23:52 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    Proč v tom případě nepoužít rovnou '\0', to je jako kdybyste používal číslo pro znak nového řádku, třeba. Ještě jsem v žádném C kódu neviděl že by někdo používal neescapovanou variantu, takže by mě to také docela zajímalo. Jestli to správně chápu, tak pokud odescapujete normální číslo tak by to mělo nahradit číslem znaku v osmičkové soustavě...
    Josef Kufner avatar 10.9.2009 21:50 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Problém v C
    To je jen otázka čitelnosti. Jinak je to jedno a překladač to nějak pořeší.
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 13:16 R
    Rozbalit Rozbalit vše Re: Problém v C
    Sice to funguje, ale ten kod je taky humus, ze sa mi ani nechce zistovat, ci je to naozaj dobre.
    Josef Kufner avatar 9.9.2009 13:29 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Problém v C
    Dík za info, psal jsem to jen tak z hlavy a nechtělo se mi to testovat ;-)
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 13:34 dark
    Rozbalit Rozbalit vše Re: Problém v C

    Dobře to není, aneb programátorská hádanka číslo 4 :)

    Josef Kufner avatar 9.9.2009 13:47 Josef Kufner | skóre: 70
    Rozbalit Rozbalit vše Re: Problém v C
    Co se ti na tom nelíbí? Nekontroluje to zda v src nejsou blbosti, ale jinak…
    Hello world ! Segmentation fault (core dumped)
    9.9.2009 15:37 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Jeden z mých tipů by směřoval na prioritu operátorů.
    In Ada the typical infinite loop would normally be terminated by detonation.
    9.9.2009 17:49 dark
    Rozbalit Rozbalit vše Re: Problém v C

    Už je to vyřešené. Operátory jsou právě v pohodě, takto se v C běžně píše, a připadá mi to i přehledné. Horší to bylo s alokací paměti. Občas se stane, že někdo zapomene připočítat NULL terminator (proto mám osobně radši nějakou knihovnu, která obsahuje String, a postará se o to).

    Ten původní kód by mu ve Visual Studiu v debug režimu asi vyhodil error (mám pocit, že free() detekuje přepis hned za alokovaným prostorem), v linuxu by si stěžoval valgrind (popřípadě přímo glibc, pokud by měl string ideální velikost).

    10.9.2009 10:29 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Problém v C
    Jestli se zase někdy nachomýtnu v diskuzi o tom, jak je psaní v C, žonglování s pointery, ukončovacími nulami a dalšími lahůdkami čirý masochismus, tak určitě přihodím link na tuto diskuzi. :-D Tak jednoduchý dotaz a 40 odpovědí, z nichž většina se zaobírá opravováním zapeklitých chyb zaslaných řešení. :-D

    (Za prvé: brát s rezervou a s humorem. Za druhé: mám Céčko rád, takže nic proti němu. Za třetí: chybičky se samozřejmě občas vloudí, ale tohle už mi přišlo vážně legrační.)
    10.9.2009 10:48 Ladicek | skóre: 28 | blog: variace | Havlíčkův brod
    Rozbalit Rozbalit vše Re: Problém v C
    Jestli se zase někdy nachomýtnu v diskuzi o tom, jak je psaní v C, žonglování s pointery, ukončovacími nulami a dalšími lahůdkami čirý masochismus
    O tom není třeba diskutovat, to je zřejmé :-D

    (A předpokládám, že též bylo zřejmé, že tuhle poznámku si neodpustím.)
    Ještě na tom nejsem tak špatně, abych četl Viewegha.
    10.9.2009 12:05 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Problém v C
    Se spíš divím, že ses neozval už dřív a musel jsem to tu napsat já. :-D
    10.9.2009 11:06 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Jojo, taky bych to tak viděl.
    In Ada the typical infinite loop would normally be terminated by detonation.
    10.9.2009 14:15 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    Na druhou stranu je to krásná ukázka toho, jak se dá taková jednoduchá funkce napsat několika způsoby, na každý způsob bude mít jiný vliv optimalizace a v každém úplně jiná chyba. Kdybych ten svůj kód nepsal přímo do komentáře, tak bych v tom možná chybu neudělal, tipuju že u ostatních je to podobně :-D.
    10.9.2009 14:56 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Problém v C
    Ta funkce se dá napsat miliardou způsobů i v Perlu, ale nehrozí tam nějaké odstřelování paměti, ukončovací byte a podobně. :-D Zkrátka tohle je nádherná ukázka toho, jak se dá v Céčku krásně žonglovat se všelijakýma fintičkama, ale i zkušený člověk si při tom prostě může nabít držku. Vzpomínám si, jak jsem v prváku na konci semestru psal v Céčku domácí úkol—asi na 200-300 řádků "alignátor" textu (doprava, doleva, na střed a do zarovnaného bloku na zadanou šířku řádky, se zalamováním a já už nevím čím). Nabíjel jsem si hubu na stejných věcech jako diskutující tady a odnesl jsem si z toho jednu z nejcennějších zkušeností ve svém dosavadním informatickém výcviku. :-)

    Určitě bys ji udělal, maximálně bys ji tak mnohem déle hledal, protože "víc očí víc vidí". :-P (vtip... nebo ne? :-))
    10.9.2009 15:22 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Sluší se dodat, že v C++ by to dopadlo podobně (s tou pamětí).
    In Ada the typical infinite loop would normally be terminated by detonation.
    11.9.2009 01:31 Sinuhet | skóre: 31
    Rozbalit Rozbalit vše Re: Problém v C

    Opravdu?

    std::string str_no_dup_space(const std::string& str)
    {
            std::string ret;
    
            std::string::const_iterator it = str.begin();
            bool space = false;
            for(; it != str.end(); ++it) {
                    if( *it == ' ' ) {
                            if( !space )
                                    ret += ' ';
    
                            space = true;
                    } else {
                            ret += *it;
                            space = false;
                    }
            }
    
            return ret;
    }
    11.9.2009 07:04 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    To je sice pěkné, ale tím jen maskujete podstatu věci. Pokud půjdete do něčeho složitějšího, tak tam někde nějaké "new" použijete.
    In Ada the typical infinite loop would normally be terminated by detonation.
    10.9.2009 15:30 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    Přesně takovýhle úkol jsem dělal v půlce druhého semestru. Původně jsem sice měl rozdělaný archivační program používající Huffmanovo kódování, ale nějak jsem to podcenil a když mi zbývalo do deadline 3 hodiny, tak jsem si vybral jiný projekt(naštěstí to nebylo pevně vybrané). Samotné napsání netrvalo moc dlouho, ale těch chyb tam :-D. Nakonec jsem za to dostal plný počet bodů ale tim kódem bych se nikde nechlubil. :-D
    10.9.2009 15:33 pht | skóre: 48 | blog: pht
    Rozbalit Rozbalit vše Re: Problém v C
    Diplomka? :P
    In Ada the typical infinite loop would normally be terminated by detonation.
    10.9.2009 15:37 Roman Došek | skóre: 17 | blog: flare
    Rozbalit Rozbalit vše Re: Problém v C
    Kdepak, diplomku budu mít za dlouho :-D
    10.9.2009 18:58 Martin | skóre: 10 | blog: Nádraží Perdido
    Rozbalit Rozbalit vše Re: Problém v C
    3 hodiny? To seš dobrej, já to dělal celej víkend. :-D Na svou obranu musím říct, že ta chyba s ukončovacím bytem byla fakt rafinovaným a zapeklitým způsobem schovaná. :-D

    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.