将char''或换行符转换为字符串

时间:2012-08-13 03:53:43

标签: c++ stringstream

我的目标是将' '转换为" ",将'\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仍然以“”返回。

3 个答案:

答案 0 :(得分:2)

不要让它如此复杂:

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

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

答案 1 :(得分:1)

Aurrgh,这看起来非常复杂......

为什么不试试这个:

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类型