Dalsi zahada v C -> Prevod long int na string

Petr Tomasek tomasek na etf.cuni.cz
Úterý Červenec 26 00:28:06 CEST 2011


On Mon, Jul 25, 2011 at 08:54:45PM +0200, Michal Gregor wrote:
> Je tam pointer "s". K cemu slouzi na co tam je?
> Staci napsat VystupniRetezec nebo VystupPrevedeneCisloRetezec a na prvni 
> pohled vidim k cemu ta promenna je. Nemusim studovat kod.

"s" je daleko prehlednejsi, navic v naproste vetsine pripadu "s"="string",
kouknu a vidim. CamelCaseNesmysly se blbe ctou.

> Michal Gregor
> 
> 
> ----- Original Message ----- 
> From: "Michal Gregor" <a2x1nptda8 at email.cz>
> To: "HW-news" <hw-list at list.hw.cz>
> Sent: Monday, July 25, 2011 8:52 PM
> Subject: Re: Dalsi zahada v C -> Prevod long int na string
> 
> 
> Ja bych rekl ze je to ukazka toho jak se nemaji psat programy. Je to dost
> neprehledne a tyhle silene zapisy obvykle ne vsechny prekladace sezerou.
> Navic takto zahusteny kod nebude po prekladu kratsi.
> 
> 
> Michal Gregor
> 
> 
> ----- Original Message ----- 
> From: "Petr Tošovský" <PetrTos at altopro.cz>
> To: "HW-news" <hw-list at list.hw.cz>
> Sent: Monday, July 25, 2011 7:46 PM
> Subject: Re: Dalsi zahada v C -> Prevod long int na string
> 
> 
> Mam dotaz k radku
> s[i++] = "0123456789ABCDEF"[n % radix];
> Jestli to dobre chapu, tak na jednom radku definujete pole primym zapisem a
> indexem z polehned vyberete vhodny prvek podle zbytku deleni. To je korektni
> zapis? C znam jen na urovni beznych zakladu. Mate zkusenost jak se to pak
> implemenuje? Neni lepsi mit retezec v datove pameti jako promennou primo? Ma
> to nejake vyhody/nevyhody?
> Diky za peknou ukazku.
> 
> Tosa
> 
> "Milan B." <milan at bastl.sk> napsal(a):
> 
> >On 24.7.2011 11:37, Michal Gregor wrote:
> >>Tak jsem program upravil na funkce itoa() a utoa().
> >>Kompilator ale hlasi chybu. Tyto funkce nezna.
> >>Koukam do navodu - jsou tam.
> >>Divam se do knihoven, nic takoveho tam neni. Ht-Soft je sice napsal
> >do
> >>navodu, ale do knihoven je zapomnel dat.
> >>
> >
> >Netreba z toho robit tragediu. Su to jednoduchucke funkcie a a daju sa
> >spichnut za par minut. Napriklad (vsetko bolo kompilovane a testovane v
> >
> >gcc, kontrola (radix >0 && radix <= 16) je umyselne vynechana):
> >
> >char *utoa(char *s, unsigned n, int radix)
> >{
> >    int i,j;
> >    unsigned char c;
> >
> >    i=0;
> >    do {
> >        s[i++] = "0123456789ABCDEF"[n % radix];
> >    } while ((n /= radix) > 0);
> >
> >    s[i]='\0';
> >
> >    for (j = 0, i--; j<i; i--, j++) {
> >        c = s[i];
> >        s[i] = s[j];
> >        s[j] = c;
> >    }
> >   return s;
> >}
> >
> >char *itoa(char *s,int n, int radix)
> >{
> >    if (n<0) {
> >        s[0]='-';
> >        utoa(s+1,(unsigned)(-n),radix);
> >    } else {
> >        utoa(s,(unsigned)n,radix);
> >   }
> >   return s;
> >}
> >
> >Ak staci len do desiatkovej sustavy, tak sa to moze (bezvyznamne)
> >zjednodusit:
> >
> >char *utoa(char *s, unsigned n)
> >{
> >     int i,j;
> >     unsigned char c;
> >
> >     i=0;
> >     do {
> >         s[i++] = n % 10 + '0';
> >     } while ((n /= 10) > 0);
> >
> >     s[i]='\0';
> >
> >     for (j = 0, i--; j<i; i--, j++) {
> >         c = s[i];
> >         s[i] = s[j];
> >         s[j] = c;
> >     }
> >   return s;
> >}
> >
> >char *itoa(char *s,int n)
> >{
> >    if (n<0) {
> >        s[0]='-';
> >        utoa(s+1,(unsigned)(-n));
> >    } else {
> >        utoa(s,(unsigned)n);
> >   }
> >   return s;
> >}
> >
> >Poznamka pre uplnost: takato itoa nefunguje s najzapornejsim cislom pre
> >
> >rozsah int, pretoze napr. pri 16-bitovom int  pre najzapornejsie cislo
> >-32768  neexistuje kladne 32768 (max. je 32767).
> >
> >Napriklad pre 16-bitovy integer by bolo vhodne osetrenie trebars takto
> >(vo funkcii itoa):
> >
> >if (n==-32768) {
> >  strcpy(s,"-32768");
> >} else {
> >...
> >}
> >
> >utoa je v poriadku pre cely rozsah.
> >
> >-m-
> 
> -- 
> Odesláno z mého tabletu s Androidem pomocí pošty K-9 Mail. Omluvte 
> prosím
> mou stručnost.
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list at list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list at list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list 
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list at list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
> 

-- 
Petr Tomasek <http://www.etf.cuni.cz/~tomasek>
Jabber: butrus at jabbim.cz

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
EA 355:001  DU DU DU DU
EA 355:002  TU TU TU TU
EA 355:003  NU NU NU NU NU NU NU
EA 355:004  NA NA NA NA NA
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~




Další informace o konferenci Hw-list