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

if(isdigit(arr[i])){//文字が数字であれば(0~9)
temp=arr[i]-'1'+26

2行目の意味を教えてください

arrに入っている文字列はchae型の数字または英字です。

おそらく数字を英字に変換しようとしている?のですがそれがどのようになっているかがわかりません

質問者からの補足コメント

  • int型のtemp。

      補足日時:2022/03/26 23:16

A 回答 (3件)

> 2行目の意味を教えてください



ただの計算です。
C言語の規格では、 文字'0'〜文字'9' は連続した数値になっているので
'1' == '0' + 1
'2' == '1' + 1
'3' == '2' + 1
...
の関係にあります。よって、 arr[i]-'1' は arr[i] がそれぞれの数字のときに
'0' - '1' == -1
'1' - '1' == 0
'2' - '1' == 1
...
'9' - '1' == 8
となります。
これに+26するので、temp は
'0' - '1' +26 == 25
'1' - '1' +26 == 26
'2' - '1' +26 == 27
...
'9' - '1' +26 == 34
となります。

これが何を意味するかは、この2行からだけでは判断できません。
少なくとも、ASCIIの文字コードでは、コントロール文字やスペース等に該当するので「英字に変換」ではないように思います。





・アルファベットの数は26
・-'1' と '1' を基準にしている
というところから推測すると
arr[i] が
'A','B','C',....,'Z','1','2','3',...,'9'
のとき、それぞれ
0,1,2,...25,26,27,28,....,34
を求める、あたりかと。
    • good
    • 0

PHP?



さておき
C では文字 '0'~'9' は連続した文字コードを持つ
ということは知っていていい.

でなんだっていわれると謎だけど.
    • good
    • 0

その後の temp がどう使われてるのかを見ないと判らん。

    • good
    • 0

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