如何将字符串转换为双浮点值?

时间:2017-02-12 18:01:14

标签: c function

抱歉,如果标题令人困惑,我只需要一些有经验的程序员来为我澄清一些事情。所以我的一个家庭作业问题问我(语言是c):

编写一个接收字符串并返回双浮点值的函数。 fucntion声明看起来像这样

double convertFloat(char s[]);

不要使用strtol()函数或任何其他标准c库函数。编写自己的!...请注意,输入字符串可以采用以下任何一种示例格式:“1.34”,“ - 1.4554”,“6”。

我只是不确定如何处理这个因为我不确定这里有什么问题。如果我必须编写一个函数来找到一个平方根或类似的东西,我可以做它没有问题,但似乎我必须采取所有数字的字符串并将它们转换为浮点数...只是不知道从哪里开始和谷歌搜索类似的东西没有产生任何结果 提前谢谢大家 - 戴维

3 个答案:

答案 0 :(得分:0)

首先写下

unsigned int convertUnsignedInt(const char *s);
// e.g. convertUnsignedInt("42") == 42

这有点简单,因为您不必处理负数或分数,但它显示了一般原则。

答案 1 :(得分:-1)

Here是strtof的示例实现。它应该可以帮助您入门并回答您的问题。该代码假定您了解template。所以,如果你想要一些如此通用的东西,那么你必须学习templates

此外,代码可以修改为仅适用于float(通过将type替换为float并删除template <typename type>行。但我已经分享了通用方法。< / p>

P.S。代码遗漏了一些边缘情况,我会留给你找到它们并在完成作业之前修复它。

答案 2 :(得分:-1)

以下是您问题的完整代码。代码是可以理解的。询问您是否对此有任何疑问。

#include <stdio.h>

int power(int n, int m)
{
    if (m == 1)
        return n;
    else
        return n * (power(n, m - 1));
}

int getLength(char s[])
{
    int i = 0;
    for(i = 0; s[i] != '\0'; i++);
    return i;
}

double convertFloat(char s[])
{
    int len = getLength(s);
    int dotpos = 0;
    double result = 0.0f;
    int n = 0, flag = 0;
    if(s[0] == '-')
    {
        n = 1;
        flag = 1;
    }
    for (; n < len; n++)
    {
        if (s[n] == '.')
        {
            dotpos = len - n - 1;
        }
        else
        {
            result = result * 10 + (s[n] - '0');
        }
    }
    result /= power(10, dotpos);
    if(flag)
        return result*-1;
    return result;
}

int main()
{
    char str[] = "126433.47";
    printf("%f", convertFloat(str));
}