• ベストアンサー

文字と数字の区別&アスキーコード取得

お世話になっております。 VC2005を使用しております。 数字や文字のアスキーコードを取得するにはどのようにすればよいのでしょうか? または、数字と文字の判断を行うにはどのような方法があるのでしょうか? 教えてください。 よろしくお願いします。

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

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.1

> 数字や文字のアスキーコードを取得するにはどのように > すればよいのでしょうか? (Windows環境で、半角英数などをさしているのであれば) その数字や文字を「値として扱えば」それがASCIIコードです。 特に変換とか取得とかはないと思いますが、どんな用法で、 どんな操作を想定していますか。 > または、数字と文字の判断を行うにはどのような方法があるのでしょうか? 標準のctypeに判別用の is~ という機能群があります。 isdigitなどで判断してください。

cappcino
質問者

お礼

お世話になっております。 ご回答ありがとうございます。 自分の一番の目的としては、文字と数字の判別を行いたいです。 たとえば、「12#103」という文字があった時に、右から1文字ずつ文字を検索します。そして、数字ではない文字(ここでは#)があった時に、それまでの文字(ここでは103)を数字として変換し、数字を1プラス(103->104)したいと考えております。 よろしくお願いします。

その他の回答 (7)

  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.8

訂正: strtol() を使うときは、#include <stdlib.h> を入れておいてください^^

cappcino
質問者

お礼

お世話になっております。 ご回答ありがとうございます。 参考にさせていただきます。 今後ともよろしくお願いします。

  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.7

あと、長い数字列がきて long に収まらない可能性がある場合は、たぶん、strtol() のあとで、戻り値や errno を調べればチェックできると思います。長い数字列もきちんと変換したいなら、long より長い非標準の整数型を使うとか、ご自分で記号処理したらいいと思います。

  • php504
  • ベストアンサー率42% (926/2160)
回答No.6

Cで作ってみました #include <stdio.h> int main(void) { char str[] = "12#103"; char* pointer = str; int num; // 文字列の終端までポインタを移動 while (*pointer) { pointer++; } if (pointer == str) { return 1; } // ポインタは'\0'を指しているので1個戻して最後の文字へ移動 pointer--; while (*pointer >= '0' && *pointer <= '9') { // 数字であればポインタをもう1個前へ移動 pointer--; } // ポインタは数字でない部分にあるので1個進める pointer++; // 文字列から整数へ変換 num = atol(pointer); printf("%d", num); return 0; }

  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.5

あっ、そうそう。マルチバイト文字列の場合にすべてうまくいくかどうかや、たとえば、 123#0 => 123->1 123#00 => 123->1 123#001 => 123->2 なるので、桁も考慮する場合などは、ご自分で工夫してみてくださいね。

cappcino
質問者

お礼

お世話になっております。 ご回答ありがとうございます。 プログラムまでのせていただき本当に助かります。 参考にさせていただきたいと思います。 今後ともよろしくお願いします。

  • mikaemi
  • ベストアンサー率50% (33/65)
回答No.4

こんなのでよければ(少なくとも2文字分は余裕があるとして) ==== #include <ctype.h> #include <stdio.h> #include <string.h> /* str には変換後の文字列を格納できるだけの領域の余裕があると仮定する */ char *mogmog(char *str) { char *p = strrchr(str, '#'), *e; long v; if (p == NULL || !isdigit(*(p + 1))) return str; v = strtol(p + 1, &e, 10); if (*e != '\0') return str; *p++ = '-'; *p++ = '>'; sprintf(p, "%ld", ++v); return str; } int main(void) { char a[10] = "123#456"; char b[10] = "213#"; char c[10] = "234#-45"; char d[10] = "123#999"; char e[10] = "123#99ae"; printf("%s => ", a); printf("%s\n", mogmog(a)); printf("%s => ", b); printf("%s\n", mogmog(b)); printf("%s => ", c); printf("%s\n", mogmog(c)); printf("%s => ", d); printf("%s\n", mogmog(d)); printf("%s => ", e); printf("%s\n", mogmog(e)); return 0; } === % a.out 123#456 => 123->457 213# => 213# 234#-45 => 234#-45 123#999 => 123->1000 123#99ae => 123#99ae

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

アスキーコードを取得というのは違う文字コードからアスキーコードに変換するという意味でしょうか UNICODEからマルチバイトなら WideCharToMultiByte( ) という関数があります。

cappcino
質問者

お礼

お世話になっております。 ご回答ありがとうございます。 自分の一番の目的としては、文字と数字の判別を行いたいです。 たとえば、「12#103」という文字があった時に、右から1文字ずつ文字を検索します。そして、数字ではない文字(ここでは#)があった時に、それまでの文字(ここでは103)を数字として変換し、数字を1プラス(103->104)したいと考えております。 よろしくお願いします。

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

補足。 C++ ⇒ <cctype> C ⇒ <ctype.h>

関連するQ&A

  • アスキーコードから数字に変換

    アスキーコードで送られてきた4つのデータを数字に変換する方法を教えてください。 4つのデータはいっぺんに送られてくるのでアスキーコード文字数は16です。(ひとつのデータは4文字です) よろしくお願いします。

  • 2バイト文字をASCIIコードに変換

    SQL Server初心者です。 SQL Serverで2バイト文字をASCIIコードの値で返したいのですが、関数ASCII()を使用すると、1バイト目のASCIIコードの値しか返してくれません。 2バイト目の文字も返す方法をご教授ください。 言葉足らずでわかりにくいかと思いますが、よろしくお願い致します。

  • アスキーコードの文字をデコードする方法

    こんにちは。 Windows環境です。 ある変数に0-9,a-zのアスキーコードの数字が格納されています。 それを元の数字や文字列にデコードしたいと思うのですが どのようにすればよろしいのでしょうか? どなたかご存知の方、よろしくお願いします。

  • アスキーコードの少ない(早い)ものを教えて下さい。

    アスキーコードでの文字の順番を調べています。 50音だったら「お」より「あ」の方が早いですよね。 もしこれが「&」と「(」ならどちらの方が早いんでしょうか?コンピュータの世界でどうなっているか知りたいです。 ちなみに、アスキーコード表を見たのですが、よく分からなかったので、ご存じの方は教えて下さい。 アスキーコード表は以下のページで調べました。 http://hp.vector.co.jp/authors/VA008536/data/ascii.html

  • ASCIIコードを文字に変換したい

    環境はVisualStdio.Net 2008のC++ Windowsフォームアプリケーションです。 C++の経験はまったくありません。 unsigned char型の配列 box[12]の中に既にアスキーコードでデータが格納されています。(例:box[0] = 48'0') これをtextbox->textにアスキーコードではなく文字で格納し、実行時に画面で確認できるようにしたいのですが、 (char)でキャストしてもfomat()で%xや%cにしても「0」でなく「48」で出力されてしまいます。 調べたらVBにはchrという関数があるみたいなんですが、これと同じ機能を持つ関数はVC++にはないのでしょうか?

  • アスキーコードまたはエスケープケンス→char

    iniファイルに記載されている アスキーコードまたはエスケープシーケンスからchar型の文字を取得したいのですが、 iniファイルから取得時にアスキーコードまたはエスケープシーケンスが文字列になってしまい、うまく変換できません。 ご教授お願いします。

  • アスキーコードとは?

    アスキーコードを簡単に説明したいのですが、ネットで調べてもよく分かりません。 「コンピュータ間で文字が読めるようにするための規格。」というので良いのでしょうか?

  • ASCII コード表の文字から10進に

    JAVAで、ASCII コードで文字表現の"G"などを、10進数に変換する方法が知りたいんです。 "G"→71 "@"→64 "0"→48 といった風に、変換したいんです。 ご存知の方教えてください。お願いします!

    • ベストアンサー
    • Java
  • ASCIIコード8bitについて

    ASCIIコード8bitについて教えてください。 『F7300.』この文字データをASCII文字コードの8bitで表現するとどのようになりますか? 変換の仕方も教えていただけたら幸いです。

  • アスキーコードへの変換について VB6(初心者)

    変数文字列をアスキーコードの10進数であらわしたいのですが、どのようなプログラムをかけばいいのでしょうか? ネットで調べたのですが、よくわかりません。 たとえば hensuumojiretuという名前の変数文字列を作り、それをアスキーコードに変換するとしたらどのようなプログラムをかいたらよいのでしょうか。 hensuumojiretuは自分で入力する形にしたいです。 それがわかったら変換後のアスキーコードを変数文字列(数字?)として定義したいと思っています。 この本に載ってるとか、このサイトにあるよという情報でもよいのでどうかおしえてくださいおねがいします。

専門家に質問してみよう