如何将char数组解析为double

时间:2012-11-25 22:45:46

标签: c++

这是我的问题,我创建了char temp [100]来将数字存储在一个文件中,temp_i是当前位置的索引(数字有temp_i个数字)

如何将char数组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);
      }
}

3 个答案:

答案 0 :(得分:2)

如果在阵列中再分配了一个插槽并将其分配给'\ 0',则可以将字符数组视为C样式字符串。

C风格的字符串打开了一大堆库例程,例如std::strtodstd::sscanf,它们可以为您提供帮助。

你也可以使用std::istringstream来获得双倍。

答案 1 :(得分:0)

Atof(ascii to float)几乎完全符合您的要求。

它接受一个指向空结束字符串的指针并返回一个浮点数。

您只需将所有数字的主字符串剪切为每个数字一个字符串,但使用stringstream之类的字符串应该非常简单。

答案 2 :(得分: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