There are two common methods to convert strings to numbers:
Using stringstream class or sscanf()
stringstream() : This is an easy way to convert strings of digits into ints, floats or doubles. Following is a sample program using a stringstream to convert string to int.
Value of x : 12345
// A stringstream is similar to input/output // file stream. We need to declare a stringstream // just like an fstream, for example: stringstream ss; // and, like an fstream or cout, // we can write to it: ss << myString; or ss << myCstring; or ss << myInt;, or float, or double, etc. // and we can read from it: ss >> myChar; or ss >> myCstring; or ss >> myInt;
To summarize, stringstream is a convenient way to manipulate strings.
sscanf() is a C style function similar to scanf(). It reads input from a string rather that standard input.
Value of x : 12345
Similarly we can read float and double using %f and %lf respectively.
String conversion using stoi() or atoi()
stoi() : The stoi() function takes a string as an argument and returns its value. Following is a simple implementation:
stoi("45") is 45 stoi("3.14159") is 3 stoi("31337 geek") is 31337
atoi() : The atoi() function takes a character array or string literal as an argument and returns its value. Following is a simple implementation:
atoi("42") is 42 atoi("3.14159") is 3 atoi("31337 geek") is 31337
stoi() vs atoi()
- atoi() is a legacy C-style function. stoi() is added in C++ 11.
- atoi() works only for C-style strings (character array and string literal), stoi() works for both C++ strings and C style strings
- atoi() takes only one parameter and returns integer value.
int atoi (const char * str);
- stoi() can take upto three parameters, the second parameter is for starting index and third parameter is for base of input number.
int stoi (const string& str, size_t* index = 0, int base = 10);
Write your own atof() that takes a string (which represents a floating-point value) as an argument and returns its value as double.
This article is contributed by Siffi Singh. If you like GeeksforGeeks and would like to contribute, you can also write an article and mail your article to firstname.lastname@example.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.