平成25年秋期 午後問9

午前試験免除制度対応!基本情報技術者試験のeラーニング【独習ゼミ】
ぴーともさん  
(No.1)
平成25年秋期 午後問9のdiccnv関数の中にif(isalpha(ch))というif文かあります。
chという文字列が英字がそうでないかを判別していると思うのですが、このisalphaはchが英字のときに0以外の値を返し、それ以外のときに0を返すと文中にあります。
そうだとすればこのif文は何を評価しているのでしょうか。
どういうときにこのif文の中に入りますか?
私のイメージではchが英字の時にtrueとなりif文の中に入るのかなあと思って解いたのですが正しいですか?
2019.10.13 11:28
someoneさん 
(No.2)
正しいと思います。
if文は括弧の中身がtrue(0以外の数字)の時にif文の中に入るので、
英字の時は0以外の数字を返すのでtrueとなりif文に入り、
英字でないときは0なのでfalseとなり入りません。
2019.10.13 16:07
ぴーともさん  
(No.3)
>>someoneさん
ということであればif(isalpha(ch))で'-'と'.'は飛ばされるので
if(ch == '-' || ch == '.')
という構文には入らないと思っておりました。
しかし今読み返すと 
while(wpos < 30 && (ch = wordx[wpos++]) != '\0'
の構文の意味を理解できていなかったとも思えます。
例えばwhile文で1文字目を読み込んで英字だった場合while構文内の
ch = wordx[wpos];
には2文字目の値がchに格納されるのですか?
そうしなければ'-'と'.'が読み込まれないため合点がいきません。
だとすればこの構文で2文字目が読み込まれる意味が分かりません(while文の中の構文がすべて終わったタイミングでwposはインクリメントですよね?)。
2019.10.13 16:41
QMさん 
FE ゴールドマイスター
(No.4)
たぶん、for文でよく見かける後処理の i++ などと混同しているのでしょう。
インクリメントのタイミングは、参照直後です。
ch = wordx[wpos++] によって、
ch に文字を取り出した後「すぐに」 wpos がインクリメントされています。

なので、while 文の中の ch = wordx[wpos] では次の文字が取り出されます。
それが '-' か '.' だった場合は、
attrx を修正してから、さらに wpos をインクリメントして次の英字に進んでおきます。
2019.10.13 20:41
ぴーともさん  
(No.5)
>>QM様
分かりました!
完全にインクリメントの処理を理解できておりませんでした。
これで合致がいきました。
ありがとうございます。
2019.10.13 21:20

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop