[itk] Számítástechnika kezdőknek

C++ programozás kezdőknek - string-szám, szám-string konverziók

[2021. december 17.] [ christo161 ]

Ebben a tananyagrészben arról lesz szó, hogyan tudunk stringet számmá vagy számot stringgé konvertálni.

Előző tananyagrész: stringek, stringműveletek
Következő tananyagrész: függvények

Tartalom

Alapvető tudnivalók

string-szám konverzióra azért lehet szükség, mert előfordulhat, hogy egy függvény stringként ad vissza egy számértéket (pl. egy olyan függvény ami fájlból olvas be, vagy egy olyan függvény ami egy ablakos alkalmazás egyik input mezőjéből olvas be), de ahhoz, hogy számokkal végezhető műveleteket végezhessünk ezzel a stringként megkapott számértékkel, át kell konvertálnunk stringről valamilyen szám típussá (pl. int vagy double).
Szám-string konverzióra pedig például azért lehet szükség ha valamilyen számértékkel szövegműveleteket (pl. szövegösszefűzés) szeretnénk végezni, vagy egy olyan függvénynek szeretnénk továbbadni az értéket, ami string típust vár (string típussal dolgozik), pl. egy olyan függvény ami egy ablakos alkalmazásban kiírja az eredményt.

A C++ nyelvben más programozási nyelvekkel (pl. Javascript, PHP) ellentétben nincs implicit típuskonverzió szám és string típusok között, vagyis számértékek nem konvertálódnak automatikusan stringgé, illetve stringek nem konvertálódnak automatikusan valamilyen szám típussá (pl. int, double). Például ezek a kódrészletek fordítási hibát okoznak:

//error
std::string str_example = "128";
int i_example = str_example;
//error
std::string str_example = 128;
//error
std::string str_example = "128";
int i_example = 256;
std::cout << str_example + i_example << '\n';

A string literálok sem konvertálódnak automatikusan számmá, viszont például a következő utasítás nem okoz fordítási hibát, de a működése helytelen.

//error
std::cout << "128" + 2 << '\n';

Ez viszont már fordítási hibát okoz:

//error
std::cout << "128" / 2 << '\n';

szám-string konverziók

std::to_string

C++11 és újabb szabványok szerint értelmezett forráskódban használhatjuk a std::to_string függvényt. Például így:

#include <iostream>
#include <string>

int main() {
  int i_example = 1234;
  std::string str_example = std::to_string( i_example );

  std::cout << "Value: " << i_example << '\n';
  std::cout << "Number of characters: " << str_example.size() << '\n';
}

stringstream

Ha includeoljuk a C++ standard library sstream header fájlját, használhatunk stringstreamet, aminek a segítségével stringeket és számokat oda-vissza konvertálhatunk.

//double to std::string conversion example
#include <iostream>
#include <string>
#include <sstream>

int main() {
  double double_example = 123.456;
  std::string string_example;

  std::stringstream sstream_example;

  sstream_example << double_example;
  sstream_example >> string_example;

  std::cout << string_example << '\n';
}

string-szám konverziók

atoi

Az atoi függvénnyel C stringeket vagy string literálokat intté konvertálhatunk.

//C string to int conversion example
#include <iostream>

int main() {
  char string_example[] = "128";
  int int_example = atoi(string_example);

  std::cout << int_example << '\n';
}
//string literal to int conversion example
#include <iostream>

int main() {
  int int_example = atoi("128");

  std::cout << int_example << '\n';
}

atol, atoll

Az atol és atoll függvényekkel C stringeket vagy string literálokat konvertálhatunk long intté és long long intté. A működésük hasonló, mint az atoi függvényé.

atof

Az atof függvénnyel C stringeket vagy string literálokat konvertálhatunk double-á (annak ellenére, hogy a neve azt sugallja, hogy floattá).

//C string to double conversion example
#include <iostream>

int main() {
  char string_example[] = "1.24";
  double double_example = atof(string_example);

  std::cout << double_example << '\n';
}
//string literal to double conversion example
#include <iostream>

int main() {
  double double_example = atof("1.24");

  std::cout << double_example << '\n';
}

stoi

Az stoi függvénnyel std::stringet intté konvertálhatunk:

//std::string to int conversion example
#include <iostream>
#include <string>

int main() {
  std::string string_example = "123456789";
  int int_example{};

  int_example = stoi(string_example);

  std::cout << int_example << '\n';
}

stol

Az stol függvénnyel std::stringet long intté konvertálhatunk. A működése hasonló mint az stoll függvényé.

stoll

//std::string to long long int conversion example
#include <iostream>
#include <string>

int main() {
  std::string string_example = "123456789123456789";
  long long int llint_example{};

  llint_example = stoll(string_example);

  std::cout << llint_example << '\n';
}

stof

Az stof függvénnyel std::stringet floattá konvertálhatunk. A működése hasonló, mint az stod függvényé.

stod

Az stod függvénnyel std::stringet double-é konvertálhatunk:

//std::string to double conversion example
#include <iostream>
#include <string>

int main() {
  std::string string_example = "123.456";
  double d_example{};

  d_example = stod(string_example);

  std::cout << d_example << '\n';
}

stringstream

Ha includeoljuk a C++ standard library sstream header fájlját, használhatunk stringstreamet, aminek a segítségével stringeket és számokat oda-vissza konvertálhatunk.

//std::string to double conversion example
#include <iostream>
#include <string>
#include <sstream>

int main() {
  std::string string_example = "123.456";
  double double_example{};

  std::stringstream sstream_example;

  sstream_example << string_example;
  sstream_example >> double_example;

  std::cout << double_example << '\n';
}

érvénytelen értékek

string-szám konverziók esetén előfordulhat, hogy az átkonvertálni kívánt string nem csak szám karaktereket tartalmaz, ez esetben a következők érvényesek:

  • ha a string elején szám karakterek vannak, utána pedig egyéb karakterek, akkor a string elején lévő szám karakterek lesznek átkonvertálva számmá (pl. "123456abcdef" esetén 123456)
  • ha a string elején nem szám karakterek vannak (pl. "abcdef123456"), az átkonvertálás eredménye 0 lesz, vagy std::invalid_argument kivétel dobódik (pl stoi függvény esetén)

Előző tananyagrész: stringek, stringműveletek
Következő tananyagrész: függvények

A bejegyzés trackback címe:

https://itkezdoknek.blog.hu/api/trackback/id/tr2316603570

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása