昔VC6でMFC/C++を少しかじったことのある者です。
この度Visual Studio 2010でMFC/C++をやってみようということになりました。
昔作った古いコーディングを参考に、よりC++らしい書き方に改めようとしています。
現在時刻を名前にしたファイルを作成する際、
ファイル名をこれまでは sprintf() を使って、
char szFileName[11];
sprintf(szFileName, "%02d%02d%02d.txt", hour, min, sec);
(*)hour, min, sec のそれぞれに、時, 分, 秒の値が格納されているとする。
ように作っていたのですが、これを iostream な書き方に改めています。
このとき、
xxx << setfill('0')
<< setw(2) << hour
<< setw(2) << min
<< setw(2) << sec
<< ".txt"
のようにするだろうことは分かったのですが、
恥ずかしながら、この xxx の定義の仕方(変数の型)が分かりません。
ウェブでいろいろ調べてみたのですが、
サンプルコードのほとんどが cout に出力していて、
変数に格納する方法が分かりませんでした。
初歩的な質問ですみませんが、よろしくお願いします。
No.1ベストアンサー
- 回答日時:
MFCならCString::Formatがあります。
これなら、sprintfとほぼ同等のことができます。
MFCではなくC++の標準ライブラリを使うのならsstreamがあります。
「C++編(標準ライブラリ) 第32章 文字列ストリーム」
http://www.geocities.jp/ky_webid/cpp/library/032 …
この回答への補足
早速の回答をありがとうございます。
sstream は、勉強になりました。使えそうです。
実は CString::Format には馴染みがあって、これを使うのが楽です。
社内にはプログラミングができる人間がほとんどいないので、
今回のソースを社内で少しでも参考にしてもれるようにと考えていまして、
そこでよりC++な書き方をしようかと思っているのですが、
どうなんでしょう、素直に Format を使うべきなんでしょうか。
今回のこの iostream の件に限らず、ひとつの処理について、
ランタイムライブラリ, iostream, API 等いろんなアプローチがあるようで、
選択が難しいです。
いろいろとご教授くださり、ありがとうございました。
大変参考になりました。
C#も勉強してみようと思います。
どうもありがとうございました。
No.5
- 回答日時:
WinRTはVisualStudio2012でしか開発できません。
ついでにWindows8でしか開発・実行できません。まぁ、OSの機能が拡張されたので当然なのですが。>Visual Studio 2010 で新規プロジェクトを作る場合、Visual C++ を選択すると、
>ATL, CLR, 全般, MFC, Win32 などが選択できるのですが、
>このうちどれが該当するのでしょうか。
>もしかすると、Visual C++ でさえないということでしょうか。
VisualStudio2012ではWindowsストアアプリと言う名称でしたね。
一応、C++からは利用できます。ただしC++/CXやらC++AMPやら色々登場して更にややこしい。ネイティブである必然(速度的問題)がないならC#をおすすめします。
http://www.atmarkit.co.jp/fdotnet/chushin/win8ap …
No.4
- 回答日時:
資産・資源の有効活用と言う面から見るとマイクロソフトは短い期間で改変を繰り返すので信用できませんね。
なのでC#やC++/CLIの言語自体は良いとしても.NETはどうなるか不安いっぱいです。それとWindows8でWinRTと言うものを打ち出して来ていますので、これまた過去資産が活用できません。これはMFCは対応していないのでC++かVB/C#でWinRTで組むしか無いです。
Linux文化で生まれたGTK+やQt(キュート)などのウィジットツールもありますので将来的なことを考えて乗り換えも検討されたほうが良いと思います。ただし日本語資料は少ないんですけどMFCも滅びそうなので。
「Qt キュート」
http://www.sra.co.jp/qt/
LGPL版のサポート無しなら無料で、マルチプラットフォームなのでコンパイルするだけでWin/Linux/Macに対応可能です。
この回答への補足
ご教授ありがとうございます。
> GTK+やQt(キュート)などのウィジットツール
いろいろあるのですね。
参考になります。
将来を見据えて、ちょっと検討してみます。
> これはMFCは対応していないのでC++かVB/C#でWinRTで組むしか無いです。
この場合の C++ とは、どういったものでしょう?
Visual Studio 2010 で新規プロジェクトを作る場合、Visual C++ を選択すると、
ATL, CLR, 全般, MFC, Win32 などが選択できるのですが、
このうちどれが該当するのでしょうか。
もしかすると、Visual C++ でさえないということでしょうか。
度々恐れ入ります...
No.3
- 回答日時:
将来的にMFCを止めるのならC++の標準ライブラリを使ったほうが良いと思います。
今後もMFCを使うならCStringで構わないと思います。CStringの方が便利なメソッドが多いですからね。
どちらにしてもC++やMFCをちゃんと勉強してもらわないと使えない代物ですので、今後のことを考えて決めて行くべき事です。こちらからはどうしたら良いとは何ともですね。
まぁ、CStringに似たクラスを自分で作れば何とでもなるのでCStringで良いんじゃないでしょうか。
この回答への補足
なるほど。参考になります。
久しぶりに C++ でプログラムを作ることになり、
経験のある MFC か、新たに CLI を勉強するか考えたんですが、
両者共 C++ と名乗っていても中身は随分違っていているようで、
CLI には頭の切り替えが追いつかずに結局 MFC にした次第です。
また、C++/CLI を勉強するなら C# の方がいいという話もありましたので。
(このあたりは、いろいろな考え方があると思いますが。)
仕方のないことでしょうが、開発言語もどんどん進化していき、
「これができる」と思っていたものが、次第に使えなくなっていきますね。
No.2
- 回答日時:
既に回答がありますが、C++ の標準ライブラリとしては、sstream があります。
#include <sstream>
として、
std::sstream mystream;
で、
mystream << (以下同様)
です。
ただ、mystream は、std::sstream 型なので、char * とは互換性がありません。
mystream.str() で、std::string 型になり、
mystream.str().c_str() でchar* として参照できます。
(ただし、読むだけにした方が良いです)
この回答への補足
早速のご教授ありがとうございます。
No.1の方の補足にも書きましたように、
一つの処理についていろんなやりかたがあって難しいですね。
> mystream.str().c_str() でchar* として参照できます。
>(ただし、読むだけにした方が良いです)
なるほど。ありがとうございます。
確か CString でも同様だったように記憶があります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- その他(パソコン・周辺機器) チャレンジタッチ3 改造 アプリインストールできない 1 2022/07/01 14:43
- Microsoft ASP C#からvbsを実行したい 5 2022/11/24 17:31
- Excel(エクセル) 1つのファイルを3つのフォルダにファイル名を【明日の日付】にして、コピーをしたい 2 2022/12/21 17:43
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- 作詞・作曲 或る曲の楽譜のコード進行の中に"F onA"なるものがありました。これはどんな和音ですか? 7 2023/05/22 00:34
- C言語・C++・C# C++のcinの動作 5 2023/02/26 00:13
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- その他(プログラミング・Web制作) テキストデータ変換(プログラミング、linux、python) 8 2023/08/08 16:39
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows Media Playerを開くと...
-
Ps+のフリープレイでDestiny2の...
-
本格的なGUIを作るのにおすすめ...
-
iPhoneのカメラロールへ画像を...
-
python urlopen error について...
-
iCloudフォトライブラリ内の画...
-
VB.net でtwitter につながるソ...
-
scipy っていうのをいれようと...
-
設定ファイルを扱うライブラリ...
-
Google ColaboでGUI作成
-
静的ライブラリから静的ライブ...
-
Google Chartの株価チャートで...
-
LIBCMT.LIBをリンクしてコンパ...
-
String^の^自体が何を意味して...
-
文字列探索アルゴリズム(Aho Co...
-
C#のゲーム作成
-
Android開発の詳しい本
-
色混ぜのアルゴリズム
-
C言語の上級者を目指したい。
-
C言語が解りません。。。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Google ColaboでGUI作成
-
Ps+のフリープレイでDestiny2の...
-
Windows Media Playerを開くと...
-
本格的なGUIを作るのにおすすめ...
-
iCloudフォトライブラリ内の画...
-
python urlopen error について...
-
scipy っていうのをいれようと...
-
LIBCMT.LIBをリンクしてコンパ...
-
ライブラリ作成時のグローバル...
-
【iTunes】CDをiPhoneに取り込...
-
静的ライブラリから静的ライブ...
-
boostのアンインストールについて
-
cでなぜguiアプリが作成出来る...
-
標準ライブラリだけでgetch関数...
-
Dreamweaverのライブラリが反映...
-
stricmp
-
iPhoneのカメラロールへ画像を...
-
ベッセル関数を使う
-
C言語について。
-
【C#C++】Win32API呼び出し
おすすめ情報