我的目标是将' '
转换为" "
,将'\n'
转换为"\n"
以下代码适用于一般情况,但不适用于空格和'\n'
。因为>>
和<<
运算符不接受' '
和'\n'
s。
std::string stringFromChar(char a) {
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
std::string s;
ss << a;
ss >> s;
return s;
}
我想通过使用std::stringstream::binary
,它使用二进制数来进行读写。因此,保留角色,而不会丢失空格或换行符。
我发现虽然a
为' '
,但s
原来是""
。
我知道解决这个问题的方法:
std::string stringFromChar(char a) {
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
std::string s;
ss << a;
s = ss.str();
return s;
}
在阅读时它是否会带走空格或换行符,但是在写作时它们会被删除吗?为什么不在字符串流中使用二进制文件?
另外,我尝试使用ss&gt;&gt; std :: noskipws&gt;&gt; s如:
std::string stringFromChar(char a) {
std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary);
std::string s;
ss << a;
ss >> std::noskipws >> s;
return s;
}
它也没用。为什么? s仍然以“”返回。
答案 0 :(得分:2)
不要让它如此复杂:
std::string stringFromChar(char a)
{
return std::string(1,a);
}
作为次要说明:
std::ios::binary
唯一能做的就是打开二进制模式。二进制模式停止将'\ n'转换为行终止序列(这是一个特定于平台的字符序列,定义为行尾)。
答案 1 :(得分:1)
为什么不试试这个:
std::string stringFromChar(char a) {
return std::string( &a, 1 );
}
或者这个:
std::string stringFromChar(char a) {
char tmp[2] = { a, 0 };
return std::string(tmp);
}
修改:如果您坚持使用流,请尝试以下操作:
std::string stringFromChar(char a) {
std::stringstream ss;
ss.put(a);
return ss.str();
}
答案 2 :(得分:0)
使用ss.get(a)从流中获取每个字符而不跳过空格和新的换行符,其中a是char类型