プロが教える店舗&オフィスのセキュリティ対策術

漢字を含んだ文字列の文字数を取得したのですがうまくいきません。
どなたか教えてください。

例: 「asetg漢字」という文字列だったら、7文字として取得したい。

上記の例で、lstrlenや、MFCの関数(String)で文字数の取得を試みたのですが、バイト数で取得してしまうため、うまくいきませんでした。

A 回答 (4件)

mbstrlen()ですか...これは便利そう!でも私の環境(VC6)にはありませんでした。

残念。

私は1文字ずつループして数えています。漢字なら2byteで1文字とカウントする方法です。漢字かどうかは以下の関数でチェックしています。


// 漢字の1バイト目なら true
boolIsSJIS_Kanji(BYTE ch)
{
return (_ismbblead((UINT)ch) != 0) ? true : false;// 0x81~0x9F || 0xE0~0xFC
}
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/01/14 19:48

>また、漢字等マルチバイトの一文字目かどうかの判定には、isleadbyteも使えます。



ごめんなさい。
一文字目かどうかではなくて、マルチバイト文字の最初のバイトかどうか、です。
失礼しました。
    • good
    • 0

もしVCをお使いでしたら、_mbstrlenはどうでしょうか。



//_mbstrlenはlocaleに依存するため次の呼び出しが必要
setlocale(LC_ALL, "japanese");
int length = _mbstrlen("asetg漢字");

また、漢字等マルチバイトの一文字目かどうかの判定には、isleadbyteも使えます。
VCにおいて_mbstrlenの実装に使われています。
ANSI規格に含まれているので、_mbstrlenに相当するものがない環境で役に立つかもしれません。
    • good
    • 0

strlen()と文字列中のマルチバイト文字数を返すmbstrlen()の二つを使って


導き出します。

lLen = strLen(str)
mb = mbstrlen(str)
sb = llen - mb * 2
Mojisu = sb + mb

頻繁に使うなら関数化してしまうと良いのではないでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!