2015-08-19 34 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; 
} 
相关问题