2012-11-25 36 views
1

這是我的問題,我創建炭溫度[100]以存儲在一個文件中的數字,temp_i是當前位置的索引(號碼具有temp_i位數)如何分析字符數組成雙

如何將字符數組temp從0轉換爲temp_i爲我創建的value

任何身體能幫助我嗎?

stack<int> first; 
char temp[10]={'0','0','0','0','0','0','0','0','0','0'}; 
int temp_i = 0; 
bool isDouble = false; 
for(int index = 0; index< strlen(str); index++){ 
    if(str[index] != ' '){ 
     temp[temp_i++] = str[index]; 
    } 
    else if(str[index] == '.') { 
     isDouble = true; 
    } else { 
     double value = *(double*)temp; 
     cout<<value<<endl; 
     first.push(value); 
     } 
} 
+0

「這個數字有TEMP_I數字」 ..嗯#grammar編譯器錯誤。 – Julius

回答

2

如果你的陣列中分配一個更插槽並將其分配到「\ 0」,你可以把你的字符數組一個C風格的字符串。

C風格的字符串打開了一大堆庫程序,例如std::strtodstd::sscanf它可以幫助你。

您也可以使用std::istringstream來獲得雙倍。

+0

但我創建了一個字符串,它可以轉換成雙? – user1686630

+1

您創建了一個字符數組。主要區別在於C風格的字符串由一個nul字符終止。你的數組不包含那個。我指的是'temp'。你應該在'str'變量上使用'strtod',你沒有顯示定義。 –

+0

例如char temp [11] = {'0','0','0','0','0','0','0','0','0','0','\ 0 「}; –

0

Atof(ascii to float)幾乎完全符合您所要做的。

它需要一個指向空字符串的指針並返回一個浮點數。

您只需將所有數字的主要字符串切割成每個數字一個字符串,但這應該很容易,如stringstream

+0

字符串值(temp,0,temp_i); \t \t \t \t \t \t float n = :: atof(value.c_str()); – user1686630

+0

但值是「4.5」,但輸出是4和5之間有一個空格 – user1686630

+0

我寫錯了什麼? – user1686630

0

使用sstream。

#include<sstream> 
#include<iostream> 
using namespace std; 

int main() 
{ 
    char * str = "123.4567 813.333 999.11"; 
    stringstream converter; 

    converter<<str<<str<<str; 


    double number0; 
    double number1; 
    double number2; 

    converter>>number0; 
    cout<<number0<<endl; 

    converter>>number1; 
    cout<<number1<<endl; 

    converter>>number2; 
    cout<<number2<<endl; 


    cin.ignore('\n', 100000); 

    return 0; 
} 

返回:

123.4567 
813.333 
999.11 
+1

而不是使用'getch()'和'conio.h' *(不是標準的)*,嘗試使用:'std :: cin.ignore('\ n',100000)''。 –

+0

感謝托馬斯馬修斯。 – Julius