1

私の目標は、に変換すること' 'です" "'\n'"\n"

以下のコードは一般的なケースで機能しますが、スペースと。では機能しません'\n'>>と演算子はとs<<を取り込めないためです。' ''\n'

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のですが、読み取りと書き込みの両方に2進数を使用しています。したがって、スペースや改行を失うことなく、文字を保持します。

であるのに、で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 に答える