Char na int – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Char na int – C / C++ – Fórum – Programujte.comChar na int – C / C++ – Fórum – Programujte.com

 

Mirek Braho0
Stálý člen
23. 4. 2007   #1
-
0
-

Tak mam zase takovej problem, otevru si soubor a ctu z nej pomoci proudů (stream), includnul sem si fstream a už se mi podarilo i oddelit cisla od slov. Třeba je tam radek:

{163}{230}- Připadá vám to známé?|- Ne.

Jde mi o to, jak můžu pracovat jen s těma číslama. Fstreamem to čtu znak po znaku, ale to je to porad char ... jde to nějak převest na int?
Vim že je funkce atoi() ale ta konvertuje string na integer.

Jde to nějak udělat bez použití céčkovskejch knihoven (stdlib, stdio) ?? Můj kousek kódu kterej jsem na to zatím splodil je tady:

while(*ch!='\n')     

{
soubor.get(*ch);
if(*ch=='{') {
while (1) {

soubor.get(*k);
if (*ch=='}')
break;

cout <<ch;
}

}
}

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
midin
~ Anonymní uživatel
320 příspěvků
23. 4. 2007   #3
-
0
-

Fce atoi() si bere jako parametr ukazatel na char, takže můžeš vesele přetypovávat. Ovšem být tebou, bych ty data ze souboru nacucával do stringu, char je okleštěn o dost dobrých vlastností.

Nahlásit jako SPAM
IP: ...–
Mirek Braho0
Stálý člen
23. 4. 2007   #4
-
0
-

To midin: Ja myslel ze char pole[] == string ? ... Asi jen špatnej úsudek :)

Ale pokud se nepletu, tak string není klasickej definovanej datovej typ ne ?

Nebo můžu deklarovat proměnnou zápisem: string a; ???

Nahlásit jako SPAM
IP: ...–
Mirek Braho0
Stálý člen
23. 4. 2007   #5
-
0
-

To Jura: Díky nějak mě nenapadlo že si mi to už psal. Ale ... moh bys mi vysvětlit na co je tam tohle ?

num = num*10+c-'0';

Vezmu-li v úvahu že před tim je definovaný num = 0; tak nevim co mi z toho vznikne a jakej to tam má účel. Když num je integer, tak to do toho můžu psát vzorec cislo - znak nebo špatně chápu to c-'0' ?

Nahlásit jako SPAM
IP: ...–
Mirek Braho0
Stálý člen
23. 4. 2007   #6
-
0
-

vollf82 píše:#
# To Jura: Díky nějak mě nenapadlo že si mi to už psal. Ale ... moh bys mi vysvětlit na co je tam tohle ? #
##
#num = num*10+c-##uvozovka##0##uvozovka##;#
##
#Vezmu-li v úvahu že před tim je definovaný num = 0; tak nevim co mi z toho vznikne a jakej to tam má účel. Když num je integer, tak to do toho můžu psát vzorec cislo - znak nebo špatně chápu to c-##uvozovka##0##uvozovka## ?



Tak už jsem to z části pochopil co to dělá, rozepsal sem si to na papír. Ale vážně nemůžu přijít na to proč je tam to c-'0', poradte, dík :)
Když to dam pryč tak to píše jiný čísla no.

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
23. 4. 2007   #7
-
0
-

Ten rozdil ti vrati _hodnotu_ toho cisla, ne jeho poradi v ASCII tabulce. Je naproto normalni ceckovsky zapis.
Pro lepsi pochopeni. Dejme tomu, ze znak '0' ma ASCII hodotu 50 a za nim nasledujici znaky '1', '2',...'9' s ASCII hodonotami 51, 52..59. Ted uz si jen staci uvedomit, ze c na vse pohlizi jako na cisla, tudiz vsechno se prekonvertuje na honoty - cisla zustanou cisly, ze znaku se ziska jejich ASCII honota. Takze co z toho plyne? Staci dosadit a vysledek bude myslim zrejmy:



char c = '1'; // ASCII hodnota 51
z vyrazu c - '0'
se stane vyraz 51 - 50;
tudiz vysledek tohoto vyrayu bude roven ciselne honote promenne c, tudiz 1.

Soucin (num * 10)je tam proto, aby se vzdy honota pricetla k novemu radu.

Nahlásit jako SPAM
IP: ...–
midin
~ Anonymní uživatel
320 příspěvků
23. 4. 2007   #8
-
0
-

vollf82 píše:#
# To midin: Ja myslel ze char pole[] == string ? ... Asi jen špatnej úsudek :)#
##
#Ale pokud se nepletu, tak string není klasickej definovanej datovej typ ne ? #
##
#Nebo můžu deklarovat proměnnou zápisem: string a; ???



String je samostatný datový typ, s char nemá nic společného. Mnohem snáze se s ním pracuje.
string a;
můžeš definovat, novější překladače (např. DevCpp 4.9.9.2) už to beou i bez #include <string>, u starších tuhle direktivu musíš psát.

Nahlásit jako SPAM
IP: ...–
Mirek Braho0
Stálý člen
24. 4. 2007   #9
-
0
-

To JURA:
Díky tak už vim o co jde. Chvíli mi to trvalo. Jen nevím, proč to teda bere jako pozici z tabulky ASCII když ta proměnná je definovaná jako INT, tudíž jako čisté číslo. Myslel jsem, že s hodnotama z ASCII tabulky pracuje jen CHAR. Když do CHARU uložim hodnotu 48 tak mi vypíše 0. Ale když do INT dam hodnotu 48 tak je tam pořád 48 ne ?

Je to tim, že get() načítá pouze znaky (char) a nic jinýho? Takže i číslo bere jako znak? Protože pak zas nevim, jak to může načítat do proměnné NUM, když ta je definovaná jako INT. To přeci znamená, že do INT ukládam char ne ?

Ja vim jsem hroznej, asi už mi chybí ta knížka, ale až přijde slibuju, že už vam dam pokoj :) ... dík

Nahlásit jako SPAM
IP: ...–
Dusan Knop0
Newbie
24. 4. 2007   #10
-
0
-

vollf82 píše:#
# To Jura: Díky nějak mě nenapadlo že si mi to už psal. Ale ... moh bys mi vysvětlit na co je tam tohle ? #
##
#num = num*10+c-##uvozovka##0##uvozovka##;#
##
#Vezmu-li v úvahu že před tim je definovaný num = 0; tak nevim co mi z toho vznikne a jakej to tam má účel. Když num je integer, tak to do toho můžu psát vzorec cislo - znak nebo špatně chápu to c-##uvozovka##0##uvozovka## ?



v literatuře se toto myslím označuje jako hornerovo schéma, takže obecné principy se dají vygooglit. A dá se to samosebou po nahrazení 10 za jinou číslici použít na převod i do jiných než jen desítkové soustavy.

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Podobná vlákna

Int na char — založil filEPina

Int vs. char, chyba programu — založil volnaduse

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý