Kezdőoldal » Számítástechnika » Programozás » C++-ban stringből integert...

C++-ban stringből integert hogyan?

Figyelt kérdés
String változót hogyan lehet integerré konvertálni C++ban? Konkrét példát írjatok légyszíves.

2014. aug. 16. 20:15
 1/10 anonim ***** válasza:

Type casting:

[link]

2014. aug. 16. 20:16
Hasznos számodra ez a válasz?
 2/10 anonim ***** válasza:

std::string myString = "45";

int value = atoi(myString.c_str());


google-->string to integer c++

2014. aug. 16. 20:50
Hasznos számodra ez a válasz?
 3/10 anonim válasza:
Legjobb megoldás az atoi, ami C-s char* stringet vár paraméterül, vagyis ha std::stringet használsz le kell kérned egy c_str() hívással a char* stringet belőle. Viszont ha végig olvasod az atoi dokumentációját 0-t ad vissza minden olyan stringre, amit nem sikerült értelmeznie. Úgyhogy külön esetként kell kezelned, hogy mi van, ha 0-t kaptál. Általában ez is külön probléma, mert nem csak "0" ad 0-t helyesen, hanem pl. "0.0" is. Amit az első hozzászóló írt egy hülyeség castolás csak típus kényszerítés. Vagyis egy char* tömb első 4 byteját kezeled, mint int-et, ami még akár memória hiba is lehet, ha pl. csak két elemű a tömb. Ha meg véletlen mégis működik, akkor sem azt adja vissza, amit szeretnél, hanem egy tök más értéket.
2014. aug. 17. 11:07
Hasznos számodra ez a válasz?
 4/10 A kérdező kommentje:

nekem pontosan arra kéne, hogy van egy szövegfájlban sok sor, a sorokban különböző adatok.

egy string vektorba tettem a sorokat, és a sorokból kéne kivennem pl a sor második karakter helyén álló számot, amit úgy érek el, hogy string[sorszám][karakterszám] (a karakterszám pl a sor 2. karaktere akkor sorszám=1)


sajnos az atoival ebben az esetben nem müködik ha a stringnek csak egy bizonyos karakterét akarom integerré alakitani

2014. aug. 17. 11:12
 5/10 A kérdező kommentje:
elírtam: a karakterszám pl a sor 2. karaktere akkor karakterszám=1
2014. aug. 17. 11:14
 6/10 A kérdező kommentje:

egy egszerubb péda, hogy mire kéne:


string a="13";


int b, c, d;


b=atoi(a.c_str()); //így működik

c=atoi(a[0].c_str()); // így már nem

d=atoi(a[1].c_str()); // így már nem


cout<<b<<" "<<c<<" "<<d<<endl;

2014. aug. 17. 11:16
 7/10 SimkoL ***** válasza:

Egy karakterre:


string a="13";

char c = a[1];

int d = c - 48;

cout << "C: " << c << " D: " << d <<" D negyzete: " << d * d <<endl;

2014. aug. 17. 12:13
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:
na igen ez nekem is feltűnt, hogy mindig 48-al nagyobb értéket dob, csak gondoltam van valami elegánsabb megoldása ennek :D de végülis oké
2014. aug. 17. 12:35
 9/10 anonim válasza:

Persze, mivel a string osztályon felül van definiálva a [] operátor, ami természetesen egy char-t ad vissza, vagyis egy karaktert. Ennek pedig nincs semmilyen metódusa, így nem hívhatsz rajta c_str()-t. A megoldás a következő:


const char* cstr = str.c_str();

int num = atoi(&cstr[1]);


Először egy const char*-á konvertálod az egész stringet, majd ennek a második karakterétől alkalmazod az atoi-t. Vagy lehet próbálkozni a string substr() metódusáaval is, és azt char*-á tenni. De valószínű, hogy amit én leírtam az hatékonyabb.

2014. aug. 18. 19:30
Hasznos számodra ez a válasz?
 10/10 anonim válasza:
Persze, hogy van elegánsabb megoldás. Egyrészt atoi-t kell használni, és megkíméled magad a szopástól. Másrészt azért 48, mert ez ASCII kódban a '0' kódja. De amit a válaszoló leírt egyébként egy hibás kód. Mert semmi nem garantálja, hogy mindig 48-á fog konvertálódni a '0'. Emiatt mindig '0'-t kell írni, amit nyugodtan szabad számként használni (lévén, hogy ez lényegében egy szám is, csak 1 byteon van ábrázolva). De igazából az egész fenti megoldás nem szép. Ha már feltétlenül így írja az ember, akkor mindenképp írjon '0'-t 48 helyett. Mert konstansokat beleégetni a kódba alapvetően hiba, és rossz is lehet. Azon kívül meg az atoi mindig jól műkdöik akár hol is fordít az ember. Vagyis nem fog behülyülni pl. más kódolástól, meg hasonlók. Elméletileg még az is lehetne, hogy '0'+1!='1'. Vagyis nem egymás után vannak ábrázolva a szám karakterek (ilyen egyébként nincsen). De az atoi akkor is jól fog működni, míg a fenti megoldás nem.
2014. aug. 18. 19:40
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!