C/C++字符串转换为数字

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.

// A program to demonstrate the use of stringstream
#include 
#include 
using namespace std;
 
int main()
{
    string s = "12345";
 
    // object from the class stringstream
    stringstream geek(s);
 
    // The object has the value 12345 and stream
    // it to the integer x
    int x = 0;
    geek >> x;
 
    // Now the variable x holds the value 12345
    cout << "Value of x : " << x;
 
    return 0;
}

Output:

Value of x : 12345

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.

#include
int main()
{
    const char *str = "12345";
    int x;
    sscanf(str, "%d", &x);
    printf("\nThe value of x : %d", x);
    return 0;
}

Output:

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:

// C++ program to demonstrate working of stoi()
// Work only if compiler supports C++11 or above.
#include 
#include 
using namespace std;
 
int main()
{
    string str1 = "45";
    string str2 = "3.14159";
    string str3 = "31337 geek";
 
    int myint1 = stoi(str1);
    int myint2 = stoi(str2);
    int myint3 = stoi(str3);
 
    cout << "stoi(\"" << str1 << "\") is "
         << myint1 << '\n';
    cout << "stoi(\"" << str2 << "\") is "
         << myint2 << '\n';
    cout << "stoi(\"" << str3 << "\") is "
         << myint3 << '\n';
 
    return 0;
}

Output:

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:

// For C++11 above
#include 
#include 
using namespace std;
 
int main()
{
    const char* str1 = "42";
    const char* str2 = "3.14159";
    const char* str3 = "31337 geek";
 
    int num1 = atoi(str1);
    int num2 = atoi(str2);
    int num3 = atoi(str3);
 
    cout << "atoi(\"" << str1 << "\") is " << num1 << '\n';
    cout << "atoi(\"" << str2 << "\") is " << num2 << '\n';
    cout << "atoi(\"" << str3 << "\") is " << num3 << '\n';
 
    return 0;
     
}

Output:

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.

  • stoi() can take upto three parameters, the second parameter is for starting index and third parameter is for base of input number.

你可能感兴趣的:(C/C++字符串转换为数字)