• ベストアンサー

文字数を取得したい

漢字を含んだ文字列の文字数を取得したのですがうまくいきません。 どなたか教えてください。 例: 「asetg漢字」という文字列だったら、7文字として取得したい。 上記の例で、lstrlenや、MFCの関数(String)で文字数の取得を試みたのですが、バイト数で取得してしまうため、うまくいきませんでした。

  • tonns
  • お礼率20% (1/5)

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

  • ベストアンサー
  • nitscape
  • ベストアンサー率30% (275/909)
回答No.2

mbstrlen()ですか...これは便利そう!でも私の環境(VC6)にはありませんでした。残念。 私は1文字ずつループして数えています。漢字なら2byteで1文字とカウントする方法です。漢字かどうかは以下の関数でチェックしています。 // 漢字の1バイト目なら true bool IsSJIS_Kanji(BYTE ch) { return (_ismbblead((UINT)ch) != 0) ? true : false; // 0x81~0x9F || 0xE0~0xFC }

tonns
質問者

お礼

ありがとうございます。 カウントすることが出来ました。

その他の回答 (3)

  • oeuvre
  • ベストアンサー率0% (0/1)
回答No.4

>また、漢字等マルチバイトの一文字目かどうかの判定には、isleadbyteも使えます。 ごめんなさい。 一文字目かどうかではなくて、マルチバイト文字の最初のバイトかどうか、です。 失礼しました。

  • oeuvre
  • ベストアンサー率0% (0/1)
回答No.3

もしVCをお使いでしたら、_mbstrlenはどうでしょうか。 //_mbstrlenはlocaleに依存するため次の呼び出しが必要 setlocale(LC_ALL, "japanese"); int length = _mbstrlen("asetg漢字"); また、漢字等マルチバイトの一文字目かどうかの判定には、isleadbyteも使えます。 VCにおいて_mbstrlenの実装に使われています。 ANSI規格に含まれているので、_mbstrlenに相当するものがない環境で役に立つかもしれません。

  • bugmaru
  • ベストアンサー率38% (76/195)
回答No.1

strlen()と文字列中のマルチバイト文字数を返すmbstrlen()の二つを使って 導き出します。 lLen = strLen(str) mb = mbstrlen(str) sb = llen - mb * 2 Mojisu = sb + mb 頻繁に使うなら関数化してしまうと良いのではないでしょうか。

関連するQ&A

  • エクセル2003 string型のデーターの所定文字数の数の取得

    いつもアドバイス頂きありがとうございます。 今回、質問させていただきたいのは、 string型でデーターを取得した文字列に対して ある文字の文字数がいくつ在るかを取得したいのですが VBA関数で、そのような関数はあるのでしょうか? 例  myDataにstring型の文字列を取得してあります。 その中に「,」(カンマ)が何個存在するかと言う事 を取得したい。 やりたい事として、mydata()の中に2次元配列要素となるデーターを 1次元で仮格納してあり、それをセルに書き出すために2次元 に格納(splitで再格納)しなおしているのですが、データーが変わる たびに、カンマの数を数えて配列宣言を記入するのが面倒なので、 カンマの数がいくつでも、2次元に再格納できるようにしたいためで す。 宜しくお願いいたします。

  • 文字列の取得

    string.subString()のなどで文字列を指定文字数分取得する場合に、バイト数指定で取得する方法ってありますか? 教えてください。

    • ベストアンサー
    • Java
  • バイト数の取得について

    Byteについて初心者なもので、詳しく教えて頂けませんか? 例)文字列:String str = "123あいう"; 5文字取得したい場合、     str.subString(0,5) ・・・ "123あい" と取得されますが、 5バイト取得("123あ")の場合、どのようにコーディングすればよろしいのでしょうか?

    • ベストアンサー
    • Java
  • 文字列のバイト数を取得したい

    処理中に渡ってくる文字列のバイト数を取得したいのですが、 そういった関数はありませんでしょうか? 探しても見つかりませんでした。 文字列はUTF-8かSJISで渡ってきますので、両方に 対応していると嬉しいです。 対応していなければ渡ってくる前に文字コードを 変換します。 どなたかご教示下さい。

    • ベストアンサー
    • PHP
  • 文字数の取得方法(Active Basic 4)

    タイトルのとおりです。 Active Basicを使ってプログラミングをしているのですが、どうしても文字数の取得方法がわかりません。 命令文「Len()」を使えば文字列の「Byte」はわかりますが、文字数が取得できません。 何か良い方法はありますか? (Active Basic 参考プログラム) Dim Str$ As String Str$ = "abc"    '3文字 計3バイト Print Len(Str$)   '「3」が表示されます Str$ = "やほ~"   '3文字 計6バイト Print Len(Str$)   '「6」が表示されます

  • 文字数が決まっていないの文字列を自動に取得して別の文字列に変換

    取得して切り出す文字列の長さが固定で無い場合には、どのようにしら良いのでしょうか? 例: ある適当な文字列を分割  ETUROGO → E T U R O G O        の様に一文字ずつ分割  各文字を他の文字列に変換  E→ 2 や T → 電話 のように全文字を  他の文字に変換  この文字列の長さが固定ならば範囲をして変換  する事が出来るのですが、  取得文字列(この場合は、ETUROGO)の長さが  3文字~20文字程度で決まっていない場合  どのようにしたら自動で変換されるのでしょうか?  LEN関数で文字数を取得  LEFT関数やMID関数等で文字列を切り出す。  という事までは考えたのですが。  文字数が変化してしまうとやり方が分かりません。  また、上記の場合は英文字なのですが同様に  文字列の長さが固定ではなく(4文字~20文字の間)  ”東京携帯配備” を ”東京” ”携帯” ”配備”  のように単語で分割し同様に他の文字列に変換  するという場合は、少し異なるのだと思うのですが  INDEX関数等を使えば良いのかな?  とも思うのですが過去の例を見ても理解出来ません。    どうかお教え願います。宜しくお願い致します。

  • 文字列取得 substrではできません。

    1バイト2バイト混在文字列を substrで取得すると、2バイト文字が半分になるため最終文字が文字化けします。 1、2バイト混在文字をうまく取得できる関数はありますか?

    • ベストアンサー
    • PHP
  • VB2005でJIS拡張漢字の各文字コードを取得する方法

    ある関数に文字列を渡して各文字コードを取得するプログラムを作成しようとしています。 基本的な文字のコードは取得できるのですが、JIS拡張漢字のほとんどが正しく取得できません。 失敗している文字は内部的に「?」(3F)となってしまいます。 例:拡張漢字のコード値(SJIS:81B2)を変換するとコード値が「3F」になってしまう。(テキストエディタなどで文字化けすると「?」に化けるのと同じなのかな?) 正しく文字コードを取得する方法をご存知の方、またヒントなどありましたらよろしくお願いします。 【環境】WindowsXP     VisualBasic2005 【プログラムの流れ】例:SJISコードを取得する場合 文字列を受取る→1文字取得→System.Text.EncodingでSJIS指定のバイト型配列文字に変換(文字コードを取得)

  • EXCEL VBA----文字列の一部を除いて取得したい

    セルの文字列の左の1文字を取得する場合は Left(string,1)でいいと思うのですが 左の1文字を取り除いた残りの文字列を取得する場合は どうすればよいのでしょうか? 文字列は複数あり、文字列の文字数は一定ではありません。(最大半角15バイト) ↓↓↓↓↓ このようにしたいのです。 ------------------------ abcde → bcde keaioph → eaioph uyt → yt dwpkmbvsz → wpkmbvsz ------------------------ よろしくお願いします。

  • char型からのバイト数取得

    文字列から1文字ずつバイト数を取得(判定)したいのですが、 char型の文字のバイト数を取得するスマートな方法はありますか? 今考えているのは以下のようなコードです。 String str ="あA" for(int i=0; i < str.length(); i++) { char ch = str.charAt(i); StringBuffer SB = new StringBuffer(); SB.append(c); if(SB.toString().getBytes.length == 1) { //1バイトの処理 } else { //2バイトの処理 } }

    • ベストアンサー
    • Java

専門家に質問してみよう