数据类型转换

时间:2010-07-20 18:08:46

标签: c++ type-conversion

C ++中是否有任何函数可以将所有数据类型(doubleintshort等)转换为string

7 个答案:

答案 0 :(得分:8)

通常你会使用<<运算符和(例如)std :: stringstream。

答案 1 :(得分:4)

答案 2 :(得分:3)

如果提升不是一个选项(它应该总是,但以防万一):

#include <sstream>
#include <string>

template<class T1, class T2>
T1 lexical_cast(const T2& value)
{
    std::stringstream stream;
    T1 retval;

    stream << value;
    stream >> retval;

    return retval;
}

template<class T>
std::string to_str(const T& value)
{
    return lexical_cast<std::string>(value);
}

Boost有类似的想法,但实施效率更高。

答案 3 :(得分:2)

没有内置的通用功能,但boost::lexical_cast<>会执行此操作。

答案 4 :(得分:1)

为什么需要这种转换?很多语言都有自动转换的变体类型,这可能导致在C ++中想要这种行为,即使可能有更规范的方法来实现它。

例如,如果您正在尝试输出,则使用某种(字符串)流可能是要走的路。如果您确实需要生成和操作字符串,可以使用boost::lexical_cast http://www.boost.org/doc/libs/1_43_0/libs/conversion/lexical_cast.htm

答案 5 :(得分:1)

这是我在实用程序库中使用的那个。这是从stackoverflow上的其他帖子中压缩而来的,我并没有将其声称为我自己的原始代码。

#include <string>
#include <sstream>

using namespace std;

template <class T>
string ToString(const T& Value) {
    stringstream ss;
    ss << Value;
    string s = ss.str();
    return s;
}

另外,我使用的另一个方便的字符串格式化实用程序:

#include <string>
#include <stdarg.h> /* we need va_list */

// Usage: string myString = FormatString("%s %d", "My Number =", num);
string FormatString(const char *fmt, ...) {

    string retStr;

    if (NULL != fmt) {
        va_list marker = NULL;
        va_start(marker, fmt);
        size_t len = 256 + 1; // hard size set to 256
        vector <char> buffer(len, '\0');
        if (vsnprintf(&buffer[0], buffer.size(), fmt, marker) > 0) {
            retStr = &buffer[0]; // Copy vector contents to the string
        }
        va_end(marker);
    }

    return retStr;
}

答案 6 :(得分:0)

为此使用stringstream。 首先将头文件包含为#include。 然后创建一个stringstream对象,并使用流插入运算符(&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&gt;)将要转换的内容传递为字符串 例如:

#include <iostream>
#include <sstream>
int main(){
    std::string name = "Ram";
    float salary = 400.56;
    std::stringstream obj;
    obj << name << " salary: " << salary;
    std::string s = obj.str();
    std::cout << s;
}