• 締切済み

全角半角を調べるライブラリ関数はありますか?

madmanの回答

  • madman
  • ベストアンサー率24% (612/2465)
回答No.1

検索対象は全て小文字でしょうか? そうであれば、 まず、1バイト目がASCII文字か判定します。 #include <ctype.h> int isalnum(int c); 判定が成立すれば0以外の値(真)を返し、成立しなければ0を返す。 新の場合(半角文字)はそのバイトを判定し、偽であれば次のバイトを判定する。 偽の場合(半角以外文字)はそのバイトと次のバイトをスキップして、その次のバイトを判定する。

crm
質問者

お礼

madman 様へ お返事ありがとうございます。 説明不足で恐縮です。 検索対象はソースファイルを指定してテストを行っておりまして、 英数字は半角で大文字小文字を含み、 英数字以外は全角半角を含んでおります。 検索対象に大文字を含んでいる場合はどうなるのでしょうか? 大変興味がありますので、 ご負担にならなければ、回答をお願いできますでしょうか? 宜しくお願い致します。

関連するQ&A

  • Access Left$関数で全角半角が混在したデータの抽出 バイト数がずれる

    AccessクエリーでのLeft$関数について教えてください。 半角英数字と漢字文字列が混在したフィールドから Left$関数で17バイト抽出したいのですが、 漢字を一文字=1バイトで換算した結果がかえってしまいます。 例) 1001-500本aaa-GG-りんご ⇒ 1001-500本aaa-GG-り 1002-500mLaaa-GG-みかん ⇒ 1002_500mLaa-GG ※[本]が漢字で[mL]は半角英数です。 後で抽出が自由にできるように、 [GG]以前の文字列のバイト数を固定にしていたのですが 全角・半角が混在していると抽出にずれがでてしまうことを知りませんでした。 ※[4バイト]+"-"+[8バイト]+"-"+[GG]+"-"としていました。 GGを含むGGより以前の文字列を抽出するにはどうすればよいでしょうか? (漢字1文字を2バイトと換算しながらLeft$で抽出するには?) よろしくおねがいいたします。

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

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

    • ベストアンサー
    • PHP
  • strConv関数を使わないで半角から全角に変換したい(VB.NET)

    こんにちは。 知っている方いらっしゃいましたら教えてください。 現在、VB.NET 2005を使ってプログラム製造をしていますが、半角の文字列を全角に変換したいです。 でも、strConv関数は使いたくないので、それ以外で変換する方法はありませんか。 よろしくお願いします。

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

  • 標準ライブラリ関数

    C言語の勉強を始めたばかりです。 標準ライブラリ関数というのがたくさんありますが、実際のソースをのせているサイトってありませんか?たとえばstrcmpを使わずにアルファベット順に並べ替えるプログラムを作ってみたいのですが。お願いします。

  • 全角半角?

    ACCESS97を使用しています。 次のような文字があります。 4-22 これを4バイトのデータに追加したところ "‐"と"-"によって "4‐2"となります。 "‐"…全角 "-"…半角という意味でしょうか? またStrConv関数で全角⇔半角、大文字⇔小文字をしたのですが 変換できません。 目的は 4‐22 のデータを 4-22 というように変換して 4バイトのところに全て追加できるようにしたいのです。  (数字ではなく "-"横棒を変換) ACCESSで可能でしょうか?

  • エクセルの半角、全角

    エクセルで、半角文字、全角文字が混在するセルを関数等で全て全角にする(半角文字を全角文字に)方法はあるでしょうか?また、文字が1バイト文字か2バイト文字かを簡単に見分ける方法はありますか?

  • EXCEL 「ASC」関数  英数字の全角を半角に変換するよい方法があれば教えてください

    EXCELで入力しているデータをフィルターを使用して検索できる データベースにしたいのですが、以前からの入力しているデータの英数字が全角、半角が混在していてます。 フィルター検索の際に全角で入力すると半角入力のものがヒットしないので不便で、英数字の半角統一にしたいと考えています。 ASC関数を使用して英数字の全角→半角を行なうこと考えたのですが ASC関数ですとカタカタも半角カタカナに変換されるので 英数字だけを全角→半角にする関数や方法などあれば教えてください。 入力データは 漢字、ひらがな、カタカナ、英数字が混在しています。 希望 全角→漢字、ひらがな、カタカナ 半角→英数字 宜しくお願い致します。

  • 全角文字を半角に変換する

    全角文字を半角へ、またはその半角文字を全角にする 関数もしくは処理がありましたら教えていただきたいの ですが、宜しくお願い致します。 また変換する文字はアルファベットと数字で、漢字とかが 入力されたらエラー表示させる例を提示していただけると たいへんありがたいです。

  • 全角半角を意識した文字分割

    A列           B列   C列  D列  E列     あいうえおかきくけこ  あ   いう  えお  か アイウエオカキクケコ    アイウ   エオ  カキ ク あイウえオかきくけこ    あ   イウえ  オか き 先ほど同じような質問を一度しているのですが、 A列に全角半角混在のテキスト項目があります。 B列、C列、D列、E列に以下のルールで分割したいのですが、 Excel関数で 実現可能でしょうか? 可能な場合は式をご教授して頂けますでしょうか。宜しくお願い致します。 ※全角をバイト数指定で分割して文字化けしないように全角半角を考慮して分割した いと考えております。 B列(半角3文字)  A列3桁目が半角の場合は半角3文字 A列3桁目全角の場合は半角2文字(全角1文字) C列 (半角4文字) A列4桁目が半角の場合は、左端4桁目~半4文字分 A列4桁目が全角の場合は、左端3桁目~半角4文字 D列(半角4文字) A列7桁目が半角の場合は、左端7桁目~半4文字分 A列7桁目が全角の場合は、左端6桁目~半角4文字 E列(半角2文字) A列11桁目が半角の場合は、左端11桁目~半2文字分 A列11桁目が全角の場合は、左端10桁目~半角2文字