2010-07-20 155 views
3

C++中是否有函數將所有數據類型(double,int, short等)轉換爲string數據類型轉換

+0

雖然沒有一個確切的重複,在這個問題的答案提供的常用方法轉換內置類型爲字符串:http://stackoverflow.com/questions/228005/alternative-to-itoa -for-converting-integer-to-string-c – 2010-07-20 18:13:05

+0

[sprintf](http://www.cplusplus.com/reference/clibrary/cstdio/sprintf/) – 2010-07-20 18:13:42

+2

@Kirill'sprintf' is C. There are better,type C++中的安全選擇。 – 2010-07-20 18:17:46

回答

7

通常,您將使用<<運算符,並結合(例如)std :: stringstream。

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); 
} 

加速也有類似的想法,但執行效率要高得多。

1

爲什麼你需要這種轉換?很多語言都具有自動轉換的變體類型,並且這可能導致想要C++中的行爲,即使可能有更具規範的實現方式。

例如,如果你想要做輸出,使用某種類型的(字符串)流可能是要走的路。如果您確實需要生成並處理字符串,則可以使用boost::lexical_casthttp://www.boost.org/doc/libs/1_43_0/libs/conversion/lexical_cast.htm

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; 
} 
0

對於這種使用stringstream的。 首先將頭文件包含爲#include。 然後創建一個stringstream對象並使用流插入操作符(< <)將要轉換的內容作爲字符串傳遞。 例如:

#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; 
}