使用std::stringstream转换为字符串在空格处失败
conversion to string with std::stringstream fails on white spaces
我试图将任何字符串或字符或数字转换为std::stringstream
的std::string
。这就是我正在做的:
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
也可以包含换行符
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;
}
您可以使用std::ostringstream::str()
成员函数直接访问流的字符串化内容。
template <typename T>
std::string toString(const T& a)
{
std::ostringstream ss;
// ↑
ss << a;
return ss.str();
// ~~~~~~~^
}
如果你真的需要使用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;
}
相关文章:
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 移除前面有空格的前2个字符串
- 用于存储由空格分隔的字符串的 C++/C 数据结构
- 在字符串中插入空格
- C ++中的StringStream有助于使用向量从字符串中提取逗号分隔的整数,而不是空格分隔的整数,为什么?
- 使用另一个字符串从字符串中删除空格
- 我还可以添加什么来按空格或空格正确拆分C++字符串?
- C++ "noskipws"没有按预期工作,如何正确允许字符串中的空格?
- 在 c++ 中逐行阅读字符串,不要以空格停止
- std::regex:匹配由数字和空格组成的字符串,并提取数字.如何?
- 如何存储包含多个空格的字符串 c++
- 在特定位置为字符串添加空格
- 有没有办法在 c++ 中获取带有空格的完整字符串?
- C++完全复制要字符串的字符列表,而不会忽略多个空格
- Winsock2:当我尝试发送带有空格的字符串时,该函数在遇到空格时似乎停止发送
- 从没有空格的字符串中提取整数
- 用于拆分空格字符串的程序不起作用
- 解析C++中的完整(从头到尾)字符串,包括所有空格
- 反转字符串中单词的位置,而不更改 O(1) 空格限制中特殊字符的顺序
- 如何获取我的区域设置的空格字符串?