質問 |
||
| QNo.3989678 | 次のプログラムを簡単にしたいです。 | |
|---|---|---|
| 質問者:evilspirit |
std::vector< string > img_file(m); img_file[0] = "image1.bmp"; ///< 画像ファイル名 img_file[1] = "image2.bmp"; ///< 画像ファイル名 img_file[2] = "image3.bmp"; ///< 画像ファイル名 img_file[3] = "image4.bmp"; ///< 画像ファイル名 img_file[4] = "image5.bmp"; ///< 画像ファイル名 img_file[5] = "image6.bmp"; ///< 画像ファイル名 img_file[6] = "image7.bmp"; ///< 画像ファイル名 img_file[7] = "image8.bmp"; ///< 画像ファイル名 img_file[8] = "image9.bmp"; ///< 画像ファイル名 img_file[9] = "image10.bmp"; ///< 画像ファイル名 img_file[10] = "image11.bmp"; ///< 画像ファイル名 img_file[11] = "image12.bmp"; ///< 画像ファイル名 img_file[12] = "image13.bmp"; ///< 画像ファイル名 ・ ・ ・ ・ img_file[99] = "image100.bmp"; ///< 画像ファイル名 /// 画像読み込み if( !mist::read_bmp( image, img_file[i] ) ){///この部分でファイル名の画像を読み込み cerr << "Could not read file: " << img_file[i] << endl; exit(1); } のように画像を入力して、プログラムを回しています。 これからimageを200や300まで増やしたいと思っています。このままだと画像ファイル名を200行、300行書かなくてはならないので、なんとかforループや他のdatファイルから画像を読み込みたいのですが、何かいい方法はないでしょうか? |
|
困り度:
|
||
| 質問投稿日時: 08/05/01 13:08 |
||
回答 |
|
| ANo.8 | >img_file.push_back((std::sprintf(buff,"image%d.bmp",i),buff)); 一瞬わからず悩んでしまった。。。 |
|---|---|
| 回答者:koko_u_ | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/05/01 20:51 |
|
| |
| この回答への補足 | 良く思いつきますよね。。。 |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |
回答良回答10pt |
|
| ANo.7 | > stringstreamの使い方がまだ分かっていないので、本で見てみます。 では sprintf を使って: std::vector<std::string> img_file; char buff[32]; for ( int i = 0; i < 10; ++i ) { img_file.push_back((std::sprintf(buff,"image%d.bmp",i),buff)); } |
|---|---|
| 回答者:episteme | |
| 種類:回答 どんな人:専門家 自信:自信あり |
|
| 回答日時: 08/05/01 16:43 |
|
| |
| この回答への補足 | for文の中で++iを使っていますが、 i++ではだめなのですか? ++iは使ったことありません。。。。 |
| この回答へのお礼 | 問題なく使用できました。 こんな使い方もできるんですね。 すっごい参考になりました。 ありがとうございます。 プログラムのいろいろな使い方はどこで習うんでしょうね。。。? |
回答 |
|
| ANo.6 | あれ? #2 の「補足」のあたりですが, vector<string> img_file(m); でとってあるなら push_back は不要では? |
|---|---|
| 回答者:Tacosan | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/05/01 16:34 |
|
| |
| この回答へのお礼 | そうですよね。 push_backを調べていたら、要素を追加すると書いてありましたが、 また別のファイルに格納する場合は不要ですよね? 一つ疑問点がとれました。 ありがとうございます。 |
回答 |
|
| ANo.5 | NO.3 です。 失礼しました(++はサッパリ判りません)。 ★img_file の宣言が char img_file[300][16]; と、Cライク(?)の場合です。 上記の宣言で試して下さい。 |
|---|---|
| 回答者:yama5140 | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/05/01 16:22 |
|
| |
| この回答へのお礼 | stringを使用しないんでcharで宣言したら、使用することが出来ました。 ありがとうございます。 stiringを使用するのと、charで宣言するのと、何が違うのでしょうね? ちょっとまだ勉強不足です。 今回使用する、部分に関して言えば、どちらでやっても大丈夫そうですが、一体どんな違いがあるのでしょう。。。 |
回答 |
|
| ANo.4 | img_file[i] は std::string だから、直接 sprintf() では書き込めないと思う。 |
|---|---|
| 回答者:koko_u_ | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/05/01 14:42 |
|
| |
| この回答への補足 | すみません。No2さんの回答の補足なのですが・・・ img_file.push_back(filename.str()); は必要なのでしょうか? これがないと安定しないとかあるのでしょうか? forの一回ごとにimg_file[]に格納しているので必要ないように思えます。 分かる方いましたらお願いします。 |
| この回答へのお礼 | やはりそうなのですか。。。 ありがとうございます。 |
回答 |
|
| ANo.3 | ★連続する数字を伴う文字列(ファイル名)の作成は、 for( i = 0; i < 300; i++ ){ sprintf( img_file[ i ], "image%03d.bmp", ( i + 1 ) ); } とすると、 ・ ・ image007.bmp image008.bmp image009.bmp image010.bmp image011.bmp ・ ・ の結果が得られます。 |
|---|---|
| 回答者:yama5140 | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/05/01 14:34 |
|
| |
| この回答へのお礼 | エラー 1 error C2664: 'sprintf' : 1 番目の引数を 'std::basic_string<_Elem,_Traits,_Ax>' から 'char *' に変換できません。(新しい機能 ; ヘルプを参照) というエラーがでてしまいます。 ご教授願えますか? |
回答良回答20pt |
|
| ANo.2 | 画像ファイル名に規則性があるなら、 stringstream filename; for ( int i = 0 ; i < 100 ; i++ ) { filename << "image" << i+1 << ".bmp"; img_file.push_back(filename.str()); filename.str(""); } とでもしておけばよいのでは? |
|---|---|
| 回答者:koko_u_ | |
| 種類:アドバイス どんな人:一般人 自信:参考意見 |
|
| 回答日時: 08/05/01 13:23 |
|
| |
| この回答への補足 | using namespace std; const size_t m = 10; vector< string > img_file(m); stringstream filename; for ( int i = 0 ; i < 10 ; i++ ) { filename << "image" << i+1 << ".bmp"; img_file.push_back(filename.str()); cout << filename.str() << endl; img_file[i] = filename.str(); filename.str(""); } |
| この回答へのお礼 | 上記の方法でimg_fileに格納することができました。 ありがとうございます。 stringstreamの使い方がまだ分かっていないので、本で見てみます。 |
回答 |
|
| ANo.1 | for (int i = 0; i < 300; i++) { char filename[20]; snprintf(filename, sizeof (filename), "image%d.bmp", i+1); img_file[i] = filename; } |
|---|---|
| 回答者:noname#60636 | |
| 種類:回答 どんな人:経験者 自信:自信あり |
|
| 回答日時: 08/05/01 13:18 |
|
| |
| この回答へのお礼 | すみません。使用してるのがvisual studio2008です。 snprintfは標準で使用することが出来ません。 |