c++ 字符串和數字轉換時的特殊處理

基本用法

表明數字的string如何轉化爲對應的數字?使用 atoi() 函數。下面是具體寫法:ios

#include <iostream>
#include <stdlib.h>  //atoi和atof對應的頭文件
#include <string>

using namespace std;

int main(){
    string a = "5";
    cout << atoi(a.c_str()) << endl;

    //輸出結果爲 5
    return 0;
}

特殊狀況

上面的例子只是給出了一個最基本的狀況,即咱們須要轉化的string是一個整數。函數

通常的,咱們可能會但願對一些表明浮點數的字符串進行轉化,這時能夠用和atoi()長得很相似的一個函數atof()spa

這兩個函數均可以處理浮點數型的string,然而結果可能不一樣,具體結果以下所示。code

#include <iostream>
#include <stdlib.h>
#include <typeinfo>
#include <string>
using namespace std;

int main(){
	string a = "5";
	string b = "5.0";
	string c = "5.5";
	
	cout << atoi(a.c_str()) << endl;
	cout << atoi(b.c_str()) << endl;
	cout << atoi(c.c_str()) << endl;
	cout << atof(a.c_str()) << endl;
	cout << atof(b.c_str()) << endl;
	cout << atof(c.c_str()) << endl;
	
	cout << typeid(atoi(a.c_str())).name() << endl;
	cout << typeid(atoi(b.c_str())).name() << endl;
	cout << typeid(atoi(c.c_str())).name() << endl;
	cout << typeid(atof(a.c_str())).name() << endl;
	cout << typeid(atof(b.c_str())).name() << endl;
	cout << typeid(atof(c.c_str())).name() << endl;
	
	return 0;
}

輸出結果以下:blog

能夠注意到:字符串

對於atoi()函數來講,不論輸入的string是不是一個浮點數,都會將小數點以後的抹去,輸出一個整數;而對於atof()函數來講,若是是5.0這樣的數,也自動會將小數點及後面的0消去。string

儘管你可能會擔憂atof()這個自動消去.0的操做會將輸出的數字變爲一個整型數,然而事實上,經過typeid()查看輸出類型可知,atoi()輸出的必定是int型的數據,而atof()輸出的必定是double型的數據。io

相關文章
相關標籤/搜索