将double / int转换为字符串的函数

时间:2013-07-31 14:02:47

标签: c++ string type-conversion

我是c ++的初学者,所以答案可能很明显。

我有两个函数 - 一个能够将int转换为字符串,另一个能够将double转换为字符串。然而,将这两者合二为一,会更优雅。我已尝试使用下面的代码,但它会产生错误:'number'未在此范围内声明

string number_into_string (void* data, int psize)
{
    if (psize == sizeof(int))
    {
        int* number; number =(int*)data;
    }
    if (psize == sizeof(double))
    {
        double* number; number = (double*)data;
    }
    ostringstream convert;
    convert << number;
    string str = convert.str();
    return str;
}

int main()
{
    double x =1000;
    int y = 5;
    string str_x = number_into_string(&x, sizeof(x));
    string str_y = number_into_string(&y, sizeof(y));
}

4 个答案:

答案 0 :(得分:9)

由于numberif ... {括号内声明,因此它只存在于该空间中。此外,您不能让一个变量在C或C ++中有两种不同的类型。

(如果你有一个C ++ 11编译器,你根本不需要这样做,只需使用大多数标准类型存在的std::to_string

解决方案是不使用指针,并使用模板函数:

template<typename T> string number_into_string(T number)
{
    ostringstream convert;
    convert << number; 
    string str = convert.str();
    return str;
}

答案 1 :(得分:3)

简单,使用std::to_string功能。

答案 2 :(得分:0)

一对花括号{}创建嵌套范围,在该范围内创建的对象在外部范围内不可见。您可以将代码重新排列为以下内容:

string number_into_string (void* data, int psize)
{
    ostringstream convert;
    if (psize == sizeof(int))
    {
        convert << *((int*) data);
    }
    if (psize == sizeof(double))
    {
        convert << *((double*) data);
    }
    return convert.str();
}

就个人而言,我会使用标准库函数而不是(严重地)重新发明轮子。

答案 3 :(得分:0)

除了相当混乱之外,错误的主要原因是可变范围。每个变量都有其可见性范围,并且在该范围之外不可见。

在函数number_into_string中,您有3个范围:

  1. 功能范围 - 这是整个功能number_into_string
  2. 第一个if阻止
  3. 第二个if阻止
  4. 函数范围的变量在if块中都可见,但不是相反。

    这意味着,在您的代码中:

    convert << number;
    

    您正在使用当前范围内未知(可见)的变量。

    另一件事是你只是 CAN&#39; T 这样做&#34;通用价值观&#34;在C ++中没有使用模板或者放置两个副本#34;转换代码&#34;进入每个if块,这使得单个&#34;转换功能无效#34;。

    CAN&#39; T 可以使用doubleintsizeof之间进行可靠区分。