0

「graphics.h」ヘッダーを使用するC++プログラム/ゲームを作成しており、タイルを使用してマップを作成しようとしています。66個のタイルがあり、各ファイル名は異なります。ほぼ同じ行を何度も書くことなく、すべてを表示したいと思います。

これは私がこれまでに持っているものです(擬似コード):

filename = a + number + b;
readimagefile (filename, left, top, right, bottom);

ここで、aは「bg(」で、その後に1から66までの数字が続き、次にbは「).bmp」です。ファイル名を「bg(number).bmp」のようにします。しかし、私が上に持っているのは明らかに間違った構文です。

どうすればこれを行うことができますか?回答をよろしくお願いします。

4

3 に答える 3

5
std::stringstream str;
str << a << number  <<  b << ".bmp";

次にstr.str()、c ++ std :: stringをstr.str().c_str()返し、「c」タイプの文字列を返します

于 2012-06-01T17:04:01.347 に答える
2

to_stringC++11 では、 (または)を使用して数値を文字列表現に変換できますto_wstring。例えば、

a + std::to_string(number) + b

(Visual C++ 2012 標準ライブラリの実装には、 と が含まれto_stringますto_wstring。)

これは、書式設定を行うために を作成するよりもはるかに簡単です (コードが少なく、読みやすい) std::stringstream(また、能力が低く、より制限されていますが、説明したような単純なユースケースでは十分です)。

あるいは、Boost.LexicalCastを使用してオブジェクトを文字列に変換することもできます。内部的には を使用しますがstd::stringstream、数値型や、ストリームを使用するのがやり過ぎになる他の型に対して最適化される場合があります。使用boost::lexical_cast:

a + boost::lexical_cast<std::string>(number) + b
于 2012-06-01T17:07:20.450 に答える
1
for(int i=0; i<66; i++)
{
   stringstream stream;
   stream << "bg(" << i << ").bmp";
   string fileName = stream.str();
}
于 2012-06-01T17:04:29.727 に答える