• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:全角数字、アルファベット大小を認識させたいのですが上手くいきません)

全角数字、アルファベット大小を認識する方法とは?

jactaの回答

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

char型が符号付きか符号無しかが処理系定義であることは、C言語をまともに勉強したものであれば知っていて当然のことです。OSが何であるかは関係なく、コンパイラとコンパイルオプションに依存します。 また、char型がint型と同じサイズである可能性も(どんなに確率が低くても)処理系が特定されない限り否定しきれません。 # どこかの会社の内製コンパイラかもしれませんし、シミュレーション環境やその他のインタープリタの可能性も否定しきれませんので。 さらに、一見シフトJISのように見えても、Big5のような類似のコードを使っている文字コードや特定の会社の内製文字コードの可能性も否定しきれませんし、TRONコードのようなものかもしれません。これらを決めうちにしているのか、ロケールに依存させるつもりなのかも、この関数を見ただけでは判断不能です。 勝手に決めつけるのは簡単ですが、正確な回答は正確な質問からしか(偶然を除いて)出てきません。

関連するQ&A

  • アルファベットと数字が入ったセルをただの数字として認識してほしいんです

    アルファベットと数字が入ったセルをただの数字として認識してほしいんです。 A1、B1セルに数値があり、 ・C1セルに「k10」と入力された時、D1セルに「10*B1」の計算結果を ・C1セルに「c/s100」と入力された時、D1セルに「100*A1」の計算結果を 自動表示されるようにしたいのですが・・関数などで何か方法はありますか? ※C1セルには「k○○」「c/s○○」の2種類あり、アルファベットと数字の間にセル内改行が入っています(○○は数字) ご存知の方、どうぞよろしくお願いします。 詳しくご回答いただけるととても助かります。

  • 全角文字のチェック

    現在C言語を勉強しております。 そこで、キーボードから入力された文字列のチェックを行う関数を作成したいのですが、実装方法が分かりません・・・。 以下に仕様と私の作成したソースを貼ります。 【許可する文字】は、 全角のひらがな 全角の英語(大文字も小文字もOK) 全角の数字 です。 チェックする関数を作成したいのですが、以下ではうまくいかず・・・ 教えてくださいorz 比較の仕方がおかしいのかな・・・とは思っているんですが。 関数は、引数として渡された文字列に許可以外の文字が含まれている場合は1を、そうでなければ0を返す、という仕様にしたいです。 int checkName(char *str) { int i; for(i = 0; str[i] != '\n'; i++){ /* 奇数バイトをチェック */ if(str[i] != 0x82){ return 1; }else{ i++; /* ひらがな以外の場合 */ if(str[i] < 0xa0 && str[i] > 0xf1) /* 英語(大文字)以外の場合 */ if(str[i] < 0x60 && str[i] > 0x79) /* 英語(小文字)以外の場合 */ if(str[i] < 0x81 && str[i] > 0x9a) /* 数字の場合 */ if(str[i] < 0x50 && str[i] > 0x58) /* 許可する文字に該当しなかった場合は1を返す */ return 1; } } return 0; } 上記ソースの「(str[i] != 0x82)」は比較の仕方としておかしいでしょうか? 以上、よろしくお願いいたします。

  • 全角文字の判定

    現在C言語を勉強しております。 そこで、キーボードから入力された文字列のチェックを行う関数を作成したいのですが、実装方法が分かりません・・・。 以下に仕様と私の作成したソースを貼ります。 【許可する文字】は、 全角のひらがな 全角の英語(大文字も小文字もOK) 全角の数字 です。 チェックする関数を作成したいのですが、以下ではうまくいかず・・・ 教えてくださいorz 比較の仕方がおかしいでしょうか? 関数は、引数として渡された文字列に許可以外の文字が含まれている場合は1を、そうでなければ0を返す、という仕様にしたいです。 int checkName(char *str) { int i; for(i = 0; str[i] != '\n'; i++){ /* 奇数バイトをチェック */ if(str[i] == 0x82){ i++; /* ひらがなの場合 */ if(str[i] >= 0xa0 && str[i] <= 0xf1) printf("ひらがな\n"); return 0; /* 英語(大文字)の場合 */ if(str[i] >= 0x60 && str[i] <= 0x79) printf("英語大\n"); return 0; /* 英語(小文字)の場合 */ if(str[i] >= 0x81 && str[i] <= 0x9a) printf("英語小\n"); return 0; /* 数字の場合 */ if(str[i] >= 0x50 && str[i] <= 0x58) printf("数字\n"); return 0; } return 1; } return 0; } 以上、よろしくお願いいたします。

  • 全角アルファベット(または数字)1文字による検索結果

    全角アルファベット(または数字)1文字を含んでいるものを問い合わせるときには、以下のようにLIKE句で指定しますが、 WHERE KOUJI_MEISYO LIKE '%A%' 検索結果には上記の例の場合、全角アルファベット「A」を含んでいるものがヒットしますが、中には全く含まれていないようなものがヒットする場合がありました。今回実際にあったものを載せておきますが、 (指名競争)大分都市計画道路県庁前古国府線道路測量設計業務委託 という文字列です。文字コードの並びで「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バイトなのか これをプログラム的に判別する方法があればいいのですが・・・悩んでいます。

  • 3つの入力した数値の大小比較ができません。

    #include<stdio.h> int main() { int a,b,c; scanf("%d",&a); scanf("%d",&b); scanf("%d",&c); if(a<b) { if(b<c) { if(a<c) { printf("%d<%d<%d\n",a,b,c); } else { printf("%d%d%d",a,b,c); } } if(b>c) { if(a>c) { printf("%d<%d<%d\n",c,b,a); } else { printf("%d<%d<%d\n",a,c,b); } } } else if(a>b) { if(b>c) { if(a>c) { printf("%d>%d>%d\n",a,b,c); } else { printf("%d>%d>%d\n",a,c,b); } } else if(b>c) { if(a>b) { printf("%d>%d>%d\n",a,b,c); } else { printf("%d>%d>%d\n",b,a,c); } } else if(c>b) { if(c>a) { printf("%d<%d<%d\n",b,a,c); } else { printf("%d>%d>%d\n",a,c,b); } } else if(a<c) { if(a<b) { printf("%d<%d<%d\n",a,b,c); } else { printf("%d<%d<%d\n",b,a,c); } } else if(a>c) { if(a<b) { printf("%d>%d>%d\n",b,a,c); } else { printf("%d>%d>%d\n",a,b,c); } } else { printf("%d=%d=%d\n",a,b,c); } } 間違っている部分を教えてください。

  • 打ち込んだ数字が素数かどうか判断するプログラム

    数字をキーボードから入力し、その数字が素数がどうかを判断するプログラムを打ちたいのですが、うまくできません。 コンパイルはできるのですが…。 どなたか間違っているところを教えてください。 #include<stdio.h> int main ( void ) { int a,b,indicator=1; printf("正の整数:"); scanf("%d", &a ); /* indicator=1.......素数でない indicator=0.......素数である */ if(a<=1){ indicator=1; } else { for(b=2;b<=(a-1);b++) { if(a%b == 0){ indicator=0; } } if(indicator==1) { printf("%dは素数ではありません\n",a); } else if (indicator==0) { printf("%dは素数です\n",a); } } return 0; }

  • アルファベット、数字を読み込んで変換出力

    アルファベット、数字を読み込んで、対応した文字、数字に変換し 出力したいのですが‥ 例えば [a-z ]= [1-26]と対応させ a,b,5,7 を読み込んで 1,2,e,g と出力させる感じです。 tr///などでコンパクトにまとめられるでしょうか? お教え願います。

    • ベストアンサー
    • Perl
  • Excel同一セル内の、アルファベットと数字を別々のセルに置き換える方法を教えてください

    ExcelのA列のセルに、アルファベットと数字の組み合わせが3000行くらい入っています。 アルファベットは1~5個でA~Z、 数字は1~3個で0~9  全て半角です。 の組み合わせです。アルファベットと数字の配置は A1    A12    A123 AB1 AB12 AB123 HD167 SDM12 WB987 の組み合わせです。 (アルファベットと数字はそれぞれまとまっていて、入り混じることはありません) これを、   A  B  C   1 A1  A   1 2 A12 A 12 3 A123 A 123 4 AB1 AB 1 のように、アルファベットと数字を別々にセルに置き換えたいのです。 マクロを使わず、B列以降のセルを使って関数でできないでしょうか? よろしくお願いいたします。

  • 半角数字が入ったデータで、半角数字を全角数字に変化関したいのですが

    半角数字が入ったデータで、半角数字を全角数字に変化関したいのですが うまくいきません。 文字コードはUTF-8です。 下記のような、関数を使ってまず半角の1を全角の1に変換しようとしました。 int substitute(unsigned char *s, int n){ int num; num= atoi(s); switch(num) { case '1': s[n] = 0xEF; s[n+1] = 0xBC; s[n+2] = 0x91; s[n+3] = 0x0d; break; defult: break; } return 0; } この関数をかましても半角は全角になりませんでした。 誰か、ご教授願えませんか?