- 締切済み
全角半角を調べるライブラリ関数はありますか?
文字列検索プログラムを作成しています。 ライブラリ関数の"strcmp"を利用せず、 ==演算子で文字同士を照合しています。 問題がありまして、 検索文字列に一文字指定し検索しますと、 漢字にヒットしてしまいます。 例) 大文字(半角) I ヒットした文字 "終"の2バイト目 この状態を改善したいのですが何かよい方法を教えてください。宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- leaz024
- ベストアンサー率75% (398/526)
使用している文字コードによって、全く異なる処理を行う必要があるのですが、シフトJISであると仮定します。 シフトJISの全角文字は、第1バイトが0x81~0x9F、0xE0~0xEFで始まる2バイトコードなので、調べた文字がこの範囲にあれば全角なので次のバイトをスキップすればOKです。 標準ライブラリにこれを調べるものは無かったように思いますので、 int issjis1( int c ) ; のような関数を自作すればよいでしょう。
- madman
- ベストアンサー率24% (612/2465)
検索対象は全て小文字でしょうか? そうであれば、 まず、1バイト目がASCII文字か判定します。 #include <ctype.h> int isalnum(int c); 判定が成立すれば0以外の値(真)を返し、成立しなければ0を返す。 新の場合(半角文字)はそのバイトを判定し、偽であれば次のバイトを判定する。 偽の場合(半角以外文字)はそのバイトと次のバイトをスキップして、その次のバイトを判定する。
お礼
madman 様へ お返事ありがとうございます。 説明不足で恐縮です。 検索対象はソースファイルを指定してテストを行っておりまして、 英数字は半角で大文字小文字を含み、 英数字以外は全角半角を含んでおります。 検索対象に大文字を含んでいる場合はどうなるのでしょうか? 大変興味がありますので、 ご負担にならなければ、回答をお願いできますでしょうか? 宜しくお願い致します。
お礼
leaz024 様へ お返事ありがとうございます。 やはり全角1バイト目を基準に判断するようですね。 大変参考になりました。 アドバイスどおり、 全角半角判定関数を作ってみます。 どうもありがとうございました。