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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 0
dnes 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
včera 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 14
včera 15:30 | Zajímavý projekt

Společnost Jolla oznámila v příspěvku Case study: Sailfish Watch na svém blogu, že naportovala Sailfish OS na chytré hodinky. Využila a inspirovala se otevřeným operačním systémem pro chytré hodinky AsteroidOS. Použita je knihovna libhybris. Ukázka ovládání hodinek na YouTube.

Ladislav Hagara | Komentářů: 8
včera 14:15 | Nová verze

Byla vydána verze 7.1.0 skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Jedná se o první stabilní verzi nejnovější větvě 7.1. Přehled novinek v dokumentaci. Podrobnosti v ChangeLogu. K dispozici je také příručka pro přechod z PHP 7.0.x na PHP 7.1.x.

Ladislav Hagara | Komentářů: 2
včera 12:55 | Nová verze

Google Chrome 55 byl prohlášen za stabilní. Nejnovější stabilní verze 55.0.2883.75 tohoto webového prohlížeče přináší řadu oprav a vylepšení (YouTube). Opraveno bylo také 36 bezpečnostních chyb. Mariusz Mlynski si například vydělal 22 500 dolarů za 3 nahlášené chyby (Universal XSS in Blink).

Ladislav Hagara | Komentářů: 4
včera 11:55 | Pozvánky

Máte rádi svobodný software a hardware nebo se o nich chcete něco dozvědět? Přijďte na 135. sraz spolku OpenAlt, který se bude konat ve čtvrtek 8. prosince od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5). Sraz bude tentokrát tématický. Bude retro! K vidění budou přístroje jako Psion 5mx nebo Palm Z22. Ze svobodného hardwaru pak Openmoko nebo čtečka WikiReader. Přijďte se i vy pochlubit svými legendami, nebo alespoň na pivo. Moderní hardware má vstup samozřejmě také povolen.

xkucf03 | Komentářů: 0
včera 00:10 | Nová verze

Byla vydána verze 3.2 svobodného systému pro detekci a prevenci průniků a monitorování bezpečnosti počítačových sítí Suricata. Z novinek lze zmínit například podporu protokolů DNP3 a CIP/ENIP, vylepšenou podporu TLS a samozřejmě také aktualizovanou dokumentaci.

Ladislav Hagara | Komentářů: 0
1.12. 21:00 | Nová verze

Byla vydána beta verze Linux Mintu 18.1 s kódovým jménem Serena. Na blogu Linux Mintu jsou hned dvě oznámení. První o vydání Linux Mintu s prostředím MATE a druhé o vydání Linux Mintu s prostředím Cinnamon. Stejným způsobem jsou rozděleny také poznámky k vydání (MATE, Cinnamon) a přehled novinek s náhledy (MATE, Cinnamon). Linux Mint 18.1 bude podporován až do roku 2021.

Ladislav Hagara | Komentářů: 0
1.12. 16:42 | Nová verze

Byl vydán Devuan Jessie 1.0 Beta 2. Jedná se o druhou beta verzi forku Debianu bez systemd představeného v listopadu 2014 (zprávička). První beta verze byla vydána v dubnu letošního roku (zprávička). Jedna z posledních přednášek věnovaných Devuanu proběhla v listopadu na konferenci FSCONS 2016 (YouTube, pdf).

Ladislav Hagara | Komentářů: 0
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 767 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: Problém v C

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

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: 66
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: 66
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: 66
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: 66
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: 66
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: 66
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: 66
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: 66
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: 66
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.