• ベストアンサー

CString Format にて全角空白文字連続して格納する方法は?

CString のメンバ関数Formatにて全角空白文字を連続して 入れる方法がありましたら教えてください。 GetBufferでアドレスを取得してmemset等で複数格納する事は 可能なのですが、できればFormatをしようしてスマートに 格納したいです。。。 ちなみに半角空白は下記で格納可能でした。 CString s; s.Format("%-36d", " "); 左詰めで半角空白が36バイト入ります。 この要領で全角空白を複数格納したいです。 引数の指定の方法等わかりましたら、教えてください。 よろしくおねがいします。

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

  • ベストアンサー
回答No.2

そのような関数を自作すれば、以後はスマートに使えますよ。 全てを既存ライブラリに頼るのではなく、自分の都合にあった 部品(関数)を自作することも重要かと思います。 例えば、こんな仕様で作っておくのはいかが? CString repeatString(int count, const char * string = NULL) { if (count <= 0) return ""; if (string == NULL) { string = " "; } // 以下、戻すべき文字列を作る処理 // CString returnString; // ... // return returnString; } // 質問の例なら、CString s = repeatString(36); // CString s = repeatString(3, "Go");なら"GoGoGo"に

その他の回答 (1)

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

>>s.Format("%-36d", " "); 上記は、数値指定です。指定はdでなくsが正しいと思います。 %-36d -> %-36s (半角空白の場合、たまたまうまくいっているようですけど) それから、CStinrgクラスに全角文字を複数セットする関数は無いようです。長い空白文字列をセットする(ちょっとカッコ悪いけどお手軽)か、全角1文字追加する関数を複数回呼び出すメンバーを追加したクラスを継承して作るなどすれば、どうでしょう? 最近C++にご無沙汰なので、自信なしですけど。

miki0723
質問者

お礼

ありがとうございます。 >>s.Format("%-36s", " "); でしたね。。。すいません。 やはり繰り返し行う等の方法しかありませんかね。 スマートに行えればとおもったのですが。

関連するQ&A

  • 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バイトなのか これをプログラム的に判別する方法があればいいのですが・・・悩んでいます。

  • 全角空白が文字エンティティで送信される

    自分で管理している掲示板があるのですが、最近「&#160;」と言う文字列が入っていました。(わざと全角で記入、実際は半角) これは空白を意味する文字エンティティのようですが、 これが2つ連続していて、どうも全角の空白を入力しようとしている、 と思えます。私はWindows使いで、このような状況が良く分かりませんが、MACの人たちはこんなことありますか。 書き込んだ人がMACユーザーかは判らないのですが、Windowsでは、 こうゆうことが無いようなので、ここで聞いてみました。 「森おうがい」の環境依存文字を入力すると、文字エンティティが 送信されると言うのは有名ですが、この全角空白は、どうも。 分かる方、御教授願います。

    • ベストアンサー
    • Mac
  • 全角空白のTRIMができない・・・

    文字列の前後の全角空白を除去するのに trimが使えると思っていたのですが、できませんでした。 (半角なら取れるのですが・・・) select trim(' あいうえお ') from dual; 何とか前後の全角空白を除去したいのですが、 何か方法はないでしょうか。

  • カウントイフ関数についてですが、半角や全角空白にお

    カウントイフ関数についてですが、半角や全角空白においても、区別してくれる関数なのでしょうか。それともしないものなのでしょうか。 とある2列を比較するため、イフ関数・カウントイフ関数➕トリム関数を使用したのですが、トリム関数には、真ん中の空白が残っています。それゆえ、その真ん中の箇所に半角全角が混在しており、カウントイフ関数では、それを別物と考えるとしたら、ジス関数などで加工する必要があると考えたので、この質問をさせていただきました。 どなたか ご存知の方がいたら、ご教示いただけないでしょうか。

  • JavaScriptの正規表現の全角スラッシュと空白

    こんばんわ。調べましたがわからなかったので質問させて下さい。 JavaScriptの正規表現の全角スラッシュと空白の表現はどうやってしたらよいのか分かりません。 半角スラッシュは、バックスラッシュの後「/」とやれば出来るのですが、全角スラッシュだと出来ません。 また空白の表現の仕方も分かりません。バックスラッシュの後「S」とやる以外になにか表現方法はありますか?

  • JNIを使った、全角半角が混在した文字列の引数、戻り値の受け渡し

    JNIを使用して、JavaからExcelを操作しようと考えております。 ワークブックを開くDLL関数を用意し、 その際に、引数としてファイルのフルパスを、戻り値として開かれたブックの名称を返すようにしたのですが、 半角英数の文字は正しく帰ってくるのですが、全角のファイル、及びフォルダを引数に指定した場合、 文字化けが発生し、ブックを開けず、困っております。 JNIを使った全角半角が混在した引数、戻り値の関数の受け渡しを行なうにはどのようにすればよいのでしょうか。 ご回答をよろしくお願いいたします。

  • エクセルで文字数制限まで空白を入れる関数

    仕事にて、エクセルを使用しています。 とあるシステムにて、エクセルで入力した文字を読み込ませないといけないのですが 文字数が1つのセルにつき全角15文字(半角30文字)と決まっています。 例えば、【たこ焼き】という文字を入れたい場合、空白文字+たこ焼き=合計15文字にしたい場合、空白文字を合わせて全角15文字にできる方法を関数等使って できないでしょうか?数百件あるので、なんとかできる方法があれば、ご教授いただけたらと思います。

  • ACCESS:半角、全角空白スペースを含む文字列の検索

    Access2003にて、空白、全角スペースを含む文字列の 検索を行う方法について教えて下さい。 他社から送られてきた検索用のリスト(xls形式)を元に、 商品の検索を下記のフィールドから行っています。 商品フィールドに商品名が約30万行格納されています。 格納されている商品名は間に 半角スペース、全角スペース、スペース無し など不規則な入力になっています。 (例:東芝除湿機、日立 掃除機、Canon 複合機…) 商品名の検索時に文字列の半角スペースと全角スペースの 指定が異なっていると検索が行えないため困っています。 (例:Canon 複合機で検索時、格納データはCanon 複合機のため検索結果なしになる) テーブルのスペースを統一、もしくは削除する方法などありますでしょうか。 皆様のお知恵をお貸し下さい。 なお、クエリでtrimを使用したスペースの削除は行ったのですが、 検索時に頻回にErrorが出るようになり断念しました。

  • 全角半角あわせて3文字

    全角半角が混在している文字列の左から3文字を取得したい場合にいい方法はないでしょうか? mb_substr関数で第3パラメータはバイト数で指定するようです。 関数リファレンスでは「最大文字数」って表現になってます。 http://php.net/manual/ja/function.mb-substr.php 半角なら文字数=バイト数ですが、全角だと指定の半分の文字数になります。 最大だから間違ってはないですが、文字数じゃないよな‥‥っていつも思ってます。 いったん半角→全角にして、6バイト分を切り出すのはできます。 でも、英数字も全角半角混在してるので元の文字列を壊したくないのです。 mb_substrの第3パラメータを6から3まで、mb_strlenが3になるまで回すのもやってみました。 でも、なんかスマートじゃないんですよ‥‥。 なにかこう、スマートないい手はないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 文字列操作:¥ を ¥¥ に置き換える方法を知りたいです。

    文字列操作:¥ を ¥¥ に置き換える方法を知りたいです。 プログラミング 初心者です。 例えば、CString strFimeName ; が、C:¥test¥a.txtの時、この文字列を C:¥¥test¥¥a.txt にしたいです。(¥は全角ですが正しくは半角です) strstr関数を使う、という解説をwebで見たのですが、うまくいきません。よろしくお願いします。

専門家に質問してみよう