2015-08-19 37 views
0

我想任何字符串或字符或數字轉換爲std::stringstd::stringstream失敗。這是我在做什麼:轉換爲字符串的std :: stringstream的白色空間

template<typename T> 
std::string toString(T a){ 
    std::string s; 
    std::stringstream ss; 
    ss <<a; 
    ss >>s; 
    return s; 
    } 

int main(int argc, char* argv[]) { 
    char s[100]="I am a string with spaces"; 
    std::cout<<toString(s); 

    return 0; 
} 

但它在第一個白色空間失敗。

輸出:

I 

預計輸出繼電器:

I am a string with spaces 

我怎樣才能做到這一點。

注:s可以包含換行符了。

+4

'回報SS。 STR();' –

+0

@PiotrSkotnicki你應該作出這樣的回答,讓我可以接受它... – Jahid

回答

3

您可以直接與std::ostringstream::str()成員函數訪問流的字符串化的內容。

template <typename T> 
std::string toString(const T& a) 
{ 
    std::ostringstream ss; 
    // ↑ 
    ss << a; 
    return ss.str(); 
    //  ~~~~~~~^ 
} 

DEMO

+0

Downvoted工作。無論如何都不解釋問題。 –

2

operator<<沒有問題插入s進入stringstream的。這與你的std::cout << s沒有區別。你做錯了什麼是從流中提取到s。這將只讀取到一個空格字符(包括空格和換行)。爲了得到流的內容,這樣做:

return ss.str(); 

但是,這是做的只是一個令人費解的方式:

std::string str = s; 

由10條線只是減少你的整個程序:

#include <iostream> 

int main(int argc, char* argv[]) { 
    char s[100]="I am a string with spaces"; 
    std::cout<<std::string(s); 

    return 0; 
} 
+2

'的std ::字符串str = S;'不會爲''int' double'等。 – Jahid

+0

工作@ Jahid這不是你問的問題,雖然 – user5242027

+1

注意的部分,上面寫着'我在想什麼'的std :: to_string'任何字符串或字符或number' – Jahid

0

如果你確實需要使用字符串流,那麼就可能的解決方案之一: (我不假裝有一個良好的代碼)

template<typename T> 
std::string toString(T a) { 
    std::stringstream ss; 
    ss << a; 
    const char* s = ss.str().c_str(); 
    ss.read((char *)s, ss.str().length()); 
    return s; 
} 
相關問題