3.2. Converting Numbers to Strings

Problem

You have numeric types (int, float) and you need to put the results in a string, perhaps formatted a certain way.

Solution

There are a number of different ways to do this, all with benefits and drawbacks. The first technique I will present uses a stringstream class to store the string data, because it is part of the standard library and easy to use. This approach is presented in Example 3-3. See the discussion for alternative techniques.

Example 3-3. Formatting a number as a string

#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>

using namespace std;

int main() {

   stringstream ss;

   ss << "There are " << 9 << " apples in my cart.";
   cout << ss.str() << endl;  // stringstream::str() returns a string
                              // with the contents

   ss.str("");                   // Empty the string
   ss << showbase << hex << 16;  // Show the base in hexadecimal
   cout << "ss = " << ss.str() << endl;

   ss.str("");
   ss << 3.14;
   cout << "ss = " << ss.str() << endl;
}

The output of Example 3-3 looks like this:

There are 9 apples in my cart.
ss = 0x10
ss = 3.14

Discussion

A stringstream is a convenient way to put data into a string because it lets you use all of the formatting facilities provided by the standard input and output stream classes. In the simplest case in Example 3-3, I just use the left-shift operator (<<) to write a combination of text and numeric data to my string stream:

ss << "There are " << 9 << " apples in my cart.";

The << operator is overloaded for built-in types ...

Get C++ Cookbook now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.