Výsledky 1 až 11 z 11

Téma: [C/C++] Int na Char[]

  1. #1

    Question [C/C++] Int na Char[]

    Potřeboval bych poradit, chci převést intové číslo do pole charů a to asi takto:


    120 -> [1] [2] [0]

    Našel jsem si pro to sice funkci sprintf, ale ta mi to udělá takto(nevím proč):

    INT pole CHARů
    120 -> [0] [2] [1]

    Mnou použitý příkaz, co dělá výše zmiňované:

    sprintf(this->number,"%i", x);

    this->number je ukazatel na pole charů definované v třídě.
    x je intové číslo

    Děkuji za radu
    Oblíbil jsem si Dropbox - pokud chcete získat bonusových 250 MB k základním 2 GB, registrujte se zde (dozvím se Váš email a jméno, co zadáte při registraci).

    Vyšla Mandriva Linux 2010 informace zde, download zde

    AMD AthlonXP 2000+; 1,5 GB RAM;WD 250 GB + WD 60 GB; GF 4 MX 64MB VRAM.
    Mandriva Linux 2010 CZ FREE (výchozí), Windows XP Professional SP3 CZ(jen škola).
    Spokojený uživatel KDE 4.4.2
    Pokud máte zájem, mám svůj blog, který najdete zde.


  2. #2

    Standardní Re: [C/C++] Int na Char[]

    Dej si pozor ať máš inicializované to pole znaků. Tohle vypadá jako by jsi měl jen náhodné věci z paměti.

    Kód:
        char * c = new char[255];
        int i = 255;
        
        sprintf(c,"%i",i);
        
        printf("%c %c %c",c[0],c[1],c[2]);
    
        delete [] c;
    Tohle mi funguje naprosto korektně.

  3. #3

    Standardní Re: [C/C++] Int na Char[]

    Špatně jsem se vyjádřil, já potřebuji, aby v C[0] byla 5(v našem případě) a ne 2. Mám totiž udělat modul pro sčítání dvou čísel, jejíchž čísla jsou právě v takovémto poli, a proto právě potřebuji, aby jednotky byly na indexu 0, desítky na indexu 1, stovky na indexu 2 tohoto pole, aby se to dobře sčítalo.
    Oblíbil jsem si Dropbox - pokud chcete získat bonusových 250 MB k základním 2 GB, registrujte se zde (dozvím se Váš email a jméno, co zadáte při registraci).

    Vyšla Mandriva Linux 2010 informace zde, download zde

    AMD AthlonXP 2000+; 1,5 GB RAM;WD 250 GB + WD 60 GB; GF 4 MX 64MB VRAM.
    Mandriva Linux 2010 CZ FREE (výchozí), Windows XP Professional SP3 CZ(jen škola).
    Spokojený uživatel KDE 4.4.2
    Pokud máte zájem, mám svůj blog, který najdete zde.


  4. #4

    Standardní Re: [C/C++] Int na Char[]

    A co si to napsat sam?
    Pro integer je to jeste vcelku easy. (pro real/float uz je to jiny kafe )

    Kód:
    char * c = new char[255];
    int rad = 0;
    bool znamenko = cislo >= 0;
    if (cislo == 0) c[rad++] = 0;
    while (cislo > 0)
    {
       c[rad++] = (cislo % 10)+'0';
       cislo = cislo / 10;
    } 
    c[rad] = znamenko ? '+' : '-';
    
    
    delete [] c;
    Mozna tam v tom moduleni chybi nejake explicitni konverze...
    GigaByte GA-M55plus-S3G --- A64 3200+ @ 24oo ~ 1,375V BOX --- 2x512 Geil 667 CL4 @ 980 CL5 --- WD2500KS --- Acer AL1721ms --- 1/1 MBit/s via WiFi
    Blog

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 aneb jeste ze ty "ochrany" programujou rozumny lidi :]

  5. #5

    Standardní Re: [C/C++] Int na Char[]

    Citace Původně odeslal MEluZíNa Zobrazit příspěvek
    A co si to napsat sam?
    Pro integer je to jeste vcelku easy. (pro real/float uz je to jiny kafe )

    Kód:
    char * c = new char[255];
    int rad = 0;
    bool znamenko = cislo >= 0;
    if (cislo == 0) c[rad++] = 0;
    while (cislo > 0)
    {
       c[rad++] = (cislo % 10)+'0';
       cislo = cislo / 10;
    } 
    c[rad] = znamenko ? '+' : '-';
    
    
    delete [] c;
    Mozna tam v tom moduleni chybi nejake explicitni konverze...
    Abych se přiznal, nejsou z toho moc chytrý, výše uvedený zdrojový kód jsem moc nepochopil Potřeboval bych jen poradit s tím, jak přehodit ty indexy v tom poli, jak píšu výše, to sčítání si udělám sám...
    Oblíbil jsem si Dropbox - pokud chcete získat bonusových 250 MB k základním 2 GB, registrujte se zde (dozvím se Váš email a jméno, co zadáte při registraci).

    Vyšla Mandriva Linux 2010 informace zde, download zde

    AMD AthlonXP 2000+; 1,5 GB RAM;WD 250 GB + WD 60 GB; GF 4 MX 64MB VRAM.
    Mandriva Linux 2010 CZ FREE (výchozí), Windows XP Professional SP3 CZ(jen škola).
    Spokojený uživatel KDE 4.4.2
    Pokud máte zájem, mám svůj blog, který najdete zde.


  6. #6

    Standardní Re: [C/C++] Int na Char[]

    Kód:
    char * c = new char[255];
    int rad = 0; // aktualni cifra
    bool znamenko = cislo >= 0; // zapamatuju si znamenko cisla
    cislo = cislo >= 0 ? cislo : -cislo; // dale jiz pracuju jen s absolutni hodnoutou
    if (cislo == 0) c[rad++] = '0'; // specialni pripad ze cislo == 0
    while (cislo > 0)  // dokud je cislo > 0
    {
       c[rad++] = (cislo % 10)+'0'; // na prislusnou pozici v poli vlozim zbytek po deleni 10; +'0' jen zvysi hodnotu charu tak aby to bylo v rozsahu '0'..'9'
       cislo = cislo / 10; // uriznu posledni cifru
    } 
    c[rad] = znamenko ? '+' : '-'; // nakonec vlozim do retezce znamenko
    
    
    delete [] c;
    PS: byly tam dva bugy 0 -> '0' a prace jen s absolutni hodnotou cisla...
    GigaByte GA-M55plus-S3G --- A64 3200+ @ 24oo ~ 1,375V BOX --- 2x512 Geil 667 CL4 @ 980 CL5 --- WD2500KS --- Acer AL1721ms --- 1/1 MBit/s via WiFi
    Blog

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 aneb jeste ze ty "ochrany" programujou rozumny lidi :]

  7. #7

    Standardní Re: [C/C++] Int na Char[]

    Tak jsem to aplikoval na svůj program a stále to dělá to, co mi to dělalo.

    Stále mám na nejmenším indexu pole číslovku z daného čísla s největším řádem

    Mám: pro číslo třeba 502

    index pole:
    0-1-2

    jeho hodnota:
    5-0-2


    Potřebuji:

    index pole:
    0-1-2

    jeho hodnota:
    2-0-5

    Jinak, koukal jsem se do manuálové stránky sprintf a našel jsem tam asi jednu možnost, jak se tomu elegantně vyhnout. V 2. tabulce odzhora je info o flagu " - ", který by měl tohle řešit, pokud jsem to správně pochopil, leč nevím, jak jej použít, zkoušel jsem všelijaké kombinace, ale nic Nevyzná se někdo v tom?

    Manuálová stránka:

    http://www.cplusplus.com/reference/c...o/sprintf.html
    Oblíbil jsem si Dropbox - pokud chcete získat bonusových 250 MB k základním 2 GB, registrujte se zde (dozvím se Váš email a jméno, co zadáte při registraci).

    Vyšla Mandriva Linux 2010 informace zde, download zde

    AMD AthlonXP 2000+; 1,5 GB RAM;WD 250 GB + WD 60 GB; GF 4 MX 64MB VRAM.
    Mandriva Linux 2010 CZ FREE (výchozí), Windows XP Professional SP3 CZ(jen škola).
    Spokojený uživatel KDE 4.4.2
    Pokud máte zájem, mám svůj blog, který najdete zde.


  8. #8

    Standardní Re: [C/C++] Int na Char[]

    Zkus ten kod trochu ladit treba jako krokovat, nebo si vypisovat co dela...
    GigaByte GA-M55plus-S3G --- A64 3200+ @ 24oo ~ 1,375V BOX --- 2x512 Geil 667 CL4 @ 980 CL5 --- WD2500KS --- Acer AL1721ms --- 1/1 MBit/s via WiFi
    Blog

    09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0 aneb jeste ze ty "ochrany" programujou rozumny lidi :]

  9. #9

    Standardní Re: [C/C++] Int na Char[]

    Tak to pole jednoduše otoč. Indexy na nejvyšší pozici dej na nejmenší. Něco jako
    Kód:
    char starePole[], novePole[];
    int delkaPole;  //delka pole starePole, tedy je-li starePole delky 3, je delkaPole = 3
     
    novePole = new char[delkaPole]
    for (int i = 0; i < delkaPole; i++) {
        novePole[delkaPole - i - 1] = starePole[i];
    }
    Je-li starePole = 1 - 2 - 0 (neboli 120), pak je delkaPole = 3.
    Tedy for cyklus proběhne třikrát, pro i = 0, i = 1, i = 2.
    i = 0:
    do novePole[3 - 0 - 1] se zapise starePole[0], tedy novePole[2] = 1
    i = 1:
    do novePole[3 - 1 - 1] se zapise starePole[1], tedy novePole[1] = 2
    i = 0:
    do novePole[3 - 2 - 1] se zapise starePole[2], tedy novePole[0] = 0

    případně, tady máš funkci, která přebere na vstupu pole char[] a vrátí nové pole char, které má opačné pořadí prvků.


    Kód:
    void obratPoradi(char starePole[], char novePole[], int delkaPole)
    {
        for (int i = 0; i < delkaPole; i++) {
            novePole[delkaPole - i - 1] = starePole[i];    
    }
    novePole samozřejmě už musí existovat a mít dostatečnou délku.

  10. #10

    Standardní Re: [C/C++] Int na Char[]

    Nebo lepe, provadet tu operaci rovnou nad tim polem. Je to efektivnejsi a napr. vetsina tridicich algoritmu tak taky pracuje.

    Je to jen nastrel z hlavy, idea je takova, ze jedes do pulky pole a prohazujes s polozkami z druhe poloviny, postupne se prohazuji polozky bliz k sobe az ke stredu.
    Jeste je potreba osetrit prazdne pole, tam by podtekl index na tretim radku, ale jinak je to snad ok. Ale nezkousel jsem to.
    Kód:
    char tmp;
    for(int i = 0; i < delka / 2; i++) {
      tmp = pole[delka - i - 1];
      pole[delka - i - 1] = pole[i];
      pole[i] = tmp;
    }

  11. #11

    Standardní Re: [C/C++] Int na Char[]

    Citace Původně odeslal peshwood Zobrazit příspěvek
    Nebo lepe, provadet tu operaci rovnou nad tim polem. Je to efektivnejsi a napr. vetsina tridicich algoritmu tak taky pracuje.
    Pravda, protože původní pole, které je obrácené než chce, už asi potřebovat nebude. Jinak daný kód samozřejmě bude fungovat. Pro jistotu odzkoušeno

Informace o tématu

Users Browsing this Thread

Toto téma si právě prohlíží 1 uživatelů. (0 registrovaných a 1 anonymních)

Podobná témata

  1. Intel Int. GMA X3100 Glx
    Založil KaplanCZ v sekci fóra Ostatní grafické karty
    Odpovědí: 0
    Poslední příspěvek: 06.10.2008, 11:33
  2. roletové menu v java apletu
    Založil seuss v sekci fóra Programování
    Odpovědí: 6
    Poslední příspěvek: 20.05.2006, 20:59
  3. Existuje Motherboard s int. grafikou a DVI vystupem ?
    Založil Helium v sekci fóra Nákupní poradna
    Odpovědí: 2
    Poslední příspěvek: 26.11.2005, 20:30
  4. Win XP SP2 (int.) Jak se zbavit ty ikony o zabezpeceni PC ?
    Založil Helium v sekci fóra Ostatní operační systémy
    Odpovědí: 3
    Poslední příspěvek: 10.11.2004, 13:14
  5. [C,WXP] Jak pretypovat int na pointer na char?
    Založil and35rew v sekci fóra Programování
    Odpovědí: 7
    Poslední příspěvek: 14.07.2004, 20:06

Klíčová slova k tématu

Pravidla přispívání

  • Nemůžete zakládat nová témata
  • Nemůžete zasílat odpovědi
  • Nemůžete přikládat přílohy
  • Nemůžete upravovat své příspěvky
  •