3

私はこれが非常に基本的なことを知っていますが、私は C++ に非常に慣れていないため、答えが見つからないようです。いくつかの整数を文字列に変換しようとしているだけです。この方法は機能します:

int a = 10;
stringstream ss;
ss << a;
string str = ss.str();

しかし、次のように2番目と3番目のものを変換する必要がある場合:

int b = 13;
stringstream ss;
ss << a;
string str2 = ss.str();

int c = 15;
stringstream ss;
ss << b;
string str3 = ss.str();

次のエラーが表示されます。

'std::stringstream ss' previously declared here

どういうわけかstringstreamを閉じる必要がありますか? コード内でそれらを互いに遠くに配置しても、コンパイラは気にしないことに気付きましたが、それは私がすべきことではないようです。誰にも提案はありますか?

4

6 に答える 6

9

同じ文字列ストリームを同じ名前で再宣言しようとしています。動作するようにコードを次のように変更できます。

 int b = 13;
stringstream ss2;
ss2 << a;
string str2 = ss2.str();

または、再宣言したくない場合は、次のようにします。

int b = 13;
ss.str(""); // empty the stringstream
ss.clear();
ss << a;
string str2 = ss.str();

を使用することもできます。これははるかに高速です。

int c = 42;
std::string s = std::to_string(c);
于 2013-03-13T02:38:41.623 に答える
3

stringstream、他の変数と同様に変数です。イディオムを変更せずに 2 回機能させるには、中かっこで囲みます。

int a = 13;
string str2;
{
    stringstream ss;
    ss << a;
    str2 = ss.str();
} // ss ceases to exist at the closing brace

int b = 15;
string str3;
{
    stringstream ss; // now we can make a new ss
    ss << b;
    str3 = ss.str();
}

C++11以降、次のことができます

std::string str4 = std::to_string( b );

または(c任意の型で)

std::string str5 = ( std::stringstream() << c ).str();

もちろん、他の解決策もあります。

于 2013-03-13T02:34:01.753 に答える
1

試す

#include <string>

int a = 10;
std::string s = std::to_string(a);
于 2013-03-13T02:33:13.693 に答える
1

あなたが得ている特定のエラーはss、同じスコープ内で同じ名前 (あなたの場合) を持つ 2 つの変数を宣言できないことを示しています。

新しいものを作成したい場合は、別のstringstreamものと呼ぶことができます。

しかし、int を文字列に変換する方法は他にもあります。std::to_string()を使用できます。

于 2013-03-13T02:34:01.407 に答える
0

次のことを必ず宣言してください。

using namespace std;

次に、コードを挿入します。

int a = 10;
ostringstream ssa;
ssa << a;
string str = ssa.str();

int b = 13;
ostringstream ssb;
ssb << b;
string str2 = ssb.str();

int c = 15;
ostringstream ssc;
ssc << c;
string str3 = ssc.str();
于 2013-09-29T16:27:03.017 に答える