C ++中是否有任何函数可以将所有数据类型(double
,int
,short
等)转换为string
?
答案 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;
}