[英]conversion to string with std::stringstream fails on white spaces
我想任何字符串或字符或数字转换std::string
用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
也可以包含换行符。
您可以使用std::ostringstream::str()
成员函数直接访问流的字符串化内容。
template <typename T>
std::string toString(const T& a)
{
std::ostringstream ss;
// ↑
ss << a;
return ss.str();
// ~~~~~~~^
}
operator<<
将s
插入字符串流没有问题。 这与您执行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;
}
如果您确实需要使用stringstream,那么有一种可能的解决方案:(我不假装有好的代码)
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.