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ě.
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. ;)
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...
Re: [C/C++] Int na Char[]
Citace:
Původně odeslal
MEluZíNa
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 :sad: 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...
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...
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
Re: [C/C++] Int na Char[]
Zkus ten kod trochu ladit;) treba jako krokovat, nebo si vypisovat co dela...
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.
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;
}
Re: [C/C++] Int na Char[]
Citace:
Původně odeslal
peshwood
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 :)