プロが教えるわが家の防犯対策術!

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

A 回答 (8件)

> 数字や文字のアスキーコードを取得するにはどのように


> すればよいのでしょうか?

(Windows環境で、半角英数などをさしているのであれば)
その数字や文字を「値として扱えば」それがASCIIコードです。
特に変換とか取得とかはないと思いますが、どんな用法で、
どんな操作を想定していますか。

> または、数字と文字の判断を行うにはどのような方法があるのでしょうか?

標準のctypeに判別用の is~ という機能群があります。
isdigitなどで判断してください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/29 10:36

訂正:


strtol() を使うときは、#include <stdlib.h> を入れておいてください^^
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/29 17:30

あと、長い数字列がきて long に収まらない可能性がある場合は、たぶん、strtol() のあとで、戻り値や errno を調べればチェックできると思います。

長い数字列もきちんと変換したいなら、long より長い非標準の整数型を使うとか、ご自分で記号処理したらいいと思います。
    • good
    • 0

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;
}
    • good
    • 0

あっ、そうそう。

マルチバイト文字列の場合にすべてうまくいくかどうかや、たとえば、

123#0 => 123->1
123#00 => 123->1
123#001 => 123->2

なるので、桁も考慮する場合などは、ご自分で工夫してみてくださいね。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/29 17:32

こんなのでよければ(少なくとも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
    • good
    • 0

アスキーコードを取得というのは違う文字コードからアスキーコードに変換するという意味でしょうか


UNICODEからマルチバイトなら
WideCharToMultiByte( )
という関数があります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/08/29 10:36

補足。


C++ ⇒ <cctype>
C ⇒ <ctype.h>
    • good
    • 0

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