文字化けしない書き方

このQ&Aのポイント
  • CString str = "%#.3f"という文字列に関して、数字部分をint valで置換したいです。
  • Format関数を使用して書きましたが、%#.が文字化けしてしまいます。
  • 代替方法として、str.Format("%s%s%s%df", "%", "#", ".", val)という書き方を使用することもできますが、書き方を簡略化したいです。
回答を見る
  • ベストアンサー

文字化けしない書き方

CString str = "%#.3f" という文字列に関して、数字部分をint valで置き換えたいなと思っています。 そこで、Formatを使って以下のように書きましたが、%#.が文字化けしてしまいます。 str.Format("%s%df", "%#.", val); 1文字ずつなら表示されるようなのですが、%#あるいは#.とやると文字化け(□)になって しまいます。なので、 str.Format("%s%s%s%df", "%", "#", ".", val); とやると、表示されるには表示されるのですが、str.Format("%s%df", ...)という書き方で 書けたらなと思っています。何か方法はないでしょうか。 よろしくお願いいたします。 環境はWindowsXP, VC2005++ &MFC です。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

str.Format( _TEXT( "%s%df" ), _TEXT( "%#." ), 2 ); ――とか。

tatumi100
質問者

お礼

回答ありがとうございます うまくいきました

関連するQ&A

  • 文字列の変換

    超 C++ 初心者です。 コンソールで "Hello, world!" を学んでからニ,三ヶ月程度です。 C++ の string クラスのメンバ関数 c_str() を用いることで /**  * string(C++ の文字列)から C の文字列(文字配列)を取り出し  * その先頭のアドレスを返す  */ ということができるのを学びました。 今 C++ の string および VC++ の CString の変換をしたいと思っています。 例えば VC++ で MFC アプリケーションを作っているとき, C++ の string である temp を VC++ の CString として使えるように するには,どういう手段をとればよいのでしょうか。 逆に VC++ の CString である temp を C++ の string として使うとき の方法もご教授ねがえれば幸いです。 超初心者につき,方法があまりにも難しいようでしたら断念することも考えています。

  • CString 大量連結

    VC++6.0のMFCで開発してます。 プログラム内で CString str; str += ○○ とやって連結し終わった後にstrを使って 処理をする所があって試した所すごく遅く、文字列がかなり 長いと固まってしまいます。調べたらCStringの大量連結は パフォーマンスががた落ちって書いてありました。 何か良い方法はないでしょうか? ※連結は必須です。

  • プラスが文字化け

    開発環境 ・Windows XP (32bit) ・Visual C++ 2005 ・マルチバイト文字セット CStdioFileクラスを使用してのファイル出力で、 以下のような処理を実行したところ文字化けしてしまいました。 文字化けを回避するにはどうすれば良いでしょうか? アドバイスお願いします。 CStdioFile file(_T("C:\\XXX\\YYY.txt"), CFile::modeCreate | CFile::modeWrite); // "+"の後ろが数値となる文字列 CString str(_T("0.000e+000")); file.Write(str, str.GetLength()); ↑の実行結果をエディタで開くと"0.000eMモ"となってしまいます。

  • libHaruJNIでおこる文字化けについて

     お世話になります。  現在、libHaruを使ってjavaからPDFを出力するプログラムを組んでいるのですが、javaからC言語側に日本語文字列を送り、それをPDFに出力すると文字化けが起きてしまい困っています。  恐らくはjava⇒Cの段階ではUTF-8でやり取りされているのに、PDFではS-JISとして書きだされるからだと思いますが、解決方法が分かりません。日本語設定はちゃんと行われており、javaからではなく直接文字列を書き込めばちゃんとPDF上で日本語が表示されます。  コードは以下の通りです。長いので必要箇所だけ書き出します。 java:  WriteStr("かきくけこ",10, 400); C: JNIEXPORT jint JNICALL Java_sample_pdf_PDF_WriteStr (JNIEnv *jenv, jobject jobj, jstring str, int x, int y) { // charにする char *path_str; path_str = jenv->GetStringUTFChars(jenv, str, NULL);//この段階では文字化けしていない HPDF_Page_BeginText (g_page); HPDF_Page_MoveTextPos (g_page, x, HPDF_Page_GetHeight (g_page)-y); HPDF_Page_ShowText (g_page, path_str);//直接”あいうえお”などを打ち込むと化けない HPDF_Page_EndText (g_page); jenv->ReleaseStringUTFChars(jenv, str, path_str); } よろしくお願いします。

    • ベストアンサー
    • Java
  • 特定文字での文字化け

    DB(oracle)から抽出したものをPerl5でcsv出力しているのですが、特定文字で文字化けが起こってしまいます。 特定文字というのが、シフトJISの「拡張文字」と言われているものにあたるらしく、 0xED40~0xED9Eとか0xFA40~0xFA9Eとかです。 0xED40→ス、0xED9E→シ、0xFA40→。、0xFA9E→.となってしまいます。(文字を出したかったのですが、表示されなかったので文字コードにしました。) $strをDBより抽出した文字列として jcode::convert( \$str, "euc" ); : :(文字列の区切り処理) : jcode::convert( \$str, "sjis" ); ということをやっています。 以前、 &jcode'convert( $str, "euc" ); : :(文字列の区切り処理) : &jcode'convert( $str, "sjis" ); とやっていたのですが、この場合、 「半角カナ+文字コードが7cを含む文字」 が文字化けを起こしていました。 これを修正するために前者のような修正をしたのですが、 間違っているのでしょうか? すみませんが、よろしくお願いします。

  • キャストについて str = (CString*)("999") ;

    環境 WIN98 VC++6.0 MFC にて いつもお世話になります。 先日質問したばかり(QNo.682705)なのですが、やはり納得できないことがあるのでお願いします。 分かっている人からみれば、おかしな疑問と思われるかも知れませんが、私にとっては素朴に疑問が生じてしまいます。 *************************** 以下2つのコードのうち、<A>は文法的にOKで<B>がNGな理由が知りたいです。 <A> CString* str ; str = (CString*)m_array.GetAt(i) ; //OK <B> CString* str ; str = (CString*)("999") ; //NG <A>は、m_arrayの要素にCString*を入れていて、初めて成り立つ式です。 と教わりましたが、むしろ私にはCString*以外が入っているため、CString*のキャストしていると思える。 CString*が入っているのなら、キャストする必要は無いのではないでしょうか? ネット上で見つけたコードなため、実際の値やm_arrayの宣言がどうなっているかは確認出来ません。 そして、<A>がおかしなコードでは無いという大前提にたつと、<A>は別の表現をすると <A> str = (CString*)(CString*以外のポインタ) ; となります。 そうすると<B>のコードも、"999"は999の文字列が入っているアドレスを指すポインタであるという考えが正しいとすると、 <B> str = (CString*)(999をさすポインタ) ; となり、おかしなコードではないと思えるのですが、考え方のどこがおかしいのでしょうか? ************************** 以下のことを教わった上であえて聞いています。 str = (CString*)("999"); は、リテラル文字列をつっこもうとしています。 リテラル文字列とCStringはまったく別物です。

  • CString型 全角半角を意識せずに「1文字」ずつ取り出す

    CString型の文字列に格納されている文字を1文字ずつ取り出したいです。 ただし半角なら1バイト単位で、全角なら2バイト単位で、という風に分離したいです。 半角だけなら、str[0] str[1]...という風に取り出せますが、 全角が混じっていると、1バイト目、2バイト目と分離されてしまいます。 その文字が半角か全角かを判断して、半角なら1バイト、全角なら2バイト同時に取り出すロジックを、下記のような感じの関数として作りたいです。 CString ripString(CString str,int index){ //ソースとなる文字列、n文字目 /*~処理~*/ return 文字列; } たとえば"あaいbうcえdおe"という文字列を入れると、 CString str="あaいbうcえdおe"; ripString(str,0) →結果 "あ" ripString(str,1) →結果 "a" ripString(str,2) →結果 "い" ripString(str,3) →結果 "b"  ・  ・  ・   こういうことをするのに良い方法はありますか? 1バイトごとのそれぞれの文字自身が、 ・半角文字なのか ・全角文字の前1バイトなのか ・全角文字の後1バイトなのか これをプログラム的に判別する方法があればいいのですが・・・悩んでいます。

  • [VBS] Unicodeの文字化けを防ぎたい

    VBSでフォルダの操作を行っています。 フォルダ名にUnicodeが含まれる場合エラーが発生します。 なんとか文字列を表示する事が出来ますでしょうか? 【文字化けサンプル.vbs】 ---------------------- REM Unicode(U+2776) str = "❶" REM 表示 msgbox str ---------------------- よろしくお願いします。

  • 文字化けを直したいのですが・・・

    ご覧いただきありがとうございます。 pcのおそらく、数字?などが文字化けしてしまうことがよくあります。 二重矢印の下向きのような文字が決まって表示されてしまいます。 どうすれば改善出来るでしょうか?分かる人いらっしゃいましたら、ご教授お願い致します。 環境は、OS windowsXP  ブラウザ firefox

  • CString を使わないで小数点キャスト

    MFCを使っています。 CString strTest; strTest.Format("%5.2f%", 50.12) としているのを、CStringを使わないでfloatから文字列にしたいのですが、 どのようにすればよいでしょう? 簡単な方法は無いでしょうか? 変換後は DrawText で表示するものです。 よろしくお願いします。

専門家に質問してみよう