- In C++11, use - std::stoias:
 -  std::string s = "10";
 int i = std::stoi(s);
 - Note that - std::stoiwill throw exception of type- std::invalid_argumentif the conversion cannot be performed, or- std::out_of_rangeif the conversion results in overflow(i.e when the string value is too big for- inttype). You can use- std::stolor- std:stollthough in case- intseems too small for the input string.
 
- In C++03/98, any of the following can be used: -  std::string s = "10";
 int i;
 //approach one
 std::istringstream(s) >> i; //i is 10 after this
 //approach two
 sscanf(s.c_str(), "%d", &i); //i is 10 after this
 
Note that  the above two approaches would fail for input s = "10jh". They will return 10 instead of notifying error. So the safe and robust approach is to write your own function that parses the input string, and verify each character to check if it is digit or not, and then work accordingly. Here is one robust implemtation (untested though):
int to_int(char const *s)
{
     if ( s == NULL || *s == '\0' )
        throw std::invalid_argument("null or empty string argument");
     bool negate = (s[0] == '-');
     if ( *s == '+' || *s == '-' ) 
         ++s;
     if ( *s == '\0')
        throw std::invalid_argument("sign character only.");
     int result = 0;
     while(*s)
     {
          if ( *s < '0' || *s > '9' )
            throw std::invalid_argument("invalid input string");
          result = result * 10  - (*s - '0');  //assume negative number
          ++s;
     }
     return negate ? result : -result; //-result is positive!
} 
This solution is slightly modified version of my another solution.