1

我的目标是转换' '" ", 并'\n'转换成"\n"

下面的代码适用于一般情况,但不适用于空格和'\n'. 因为>>and<<运算符不接受' 'and '\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;
}

阅读时不会删除空格或换行符,但在写作时会被删除,这是真的吗?为什么不使用带有 stringstream 的二进制文件?

另外,我尝试使用 ss >> std::noskipws >> 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 仍然返回为“”。

4

3 回答 3

2

不要让它这么复杂:

std::string stringFromChar(char a)
{
    return std::string(1,a);
}

作为次要说明:
唯一要做的std::ios::binary就是打开二进制模式。二进制模式停止 '\n' 与行终止序列(定义为行尾的特定平台字符序列)之间的转换。

于 2012-08-13T04:02:35.613 回答
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();
}
于 2012-08-13T04:01:40.823 回答
0

使用 ss.get(a) 从流中获取每个字符,而不会跳过空格和换行符,其中 a 是 char 类型

于 2015-07-07T18:51:22.873 回答