HOME»基本情報技術者試験掲示板»平成29年秋期試験 午後問9
投稿する
平成29年秋期試験 午後問9 [2346]
ITビギナーさん(No.1)
ご教授願います。
以前、解き直しで納得していたと思ってたのですが、再度見直しで躓いてしまいました。
[プログラム] 35行目
while(!isalnum(chars[l])){
ですが、isalnum(ch)は英数字→0以外なので仮にchが'a'のときは0以外となり、while(!isalnum(chars[l]))はwhile(!(0以外)) でwhile(0)となりループが進みません。
この35,38行目のwhile文は記号や空白のフィルタリング目的と考えてよいのでしょうか。
よろしくお願いします。
以前、解き直しで納得していたと思ってたのですが、再度見直しで躓いてしまいました。
[プログラム] 35行目
while(!isalnum(chars[l])){
ですが、isalnum(ch)は英数字→0以外なので仮にchが'a'のときは0以外となり、while(!isalnum(chars[l]))はwhile(!(0以外)) でwhile(0)となりループが進みません。
この35,38行目のwhile文は記号や空白のフィルタリング目的と考えてよいのでしょうか。
よろしくお願いします。
2020.07.08 20:58
管理人(No.2)
「文字の並びを読むとき,記号及び空白文字は無視する。」という仕様を実現するため、回文判定をするときこれらをスキップするループ処理です。
chars[l]が英数字であれば次の文字に進める必要はないので、while 内を実行せずそのままchars[r]と比較し、chars[l]が空白・記号であれば英数字が現れるまでスキップしてからchars[r]と比較します。
chars[l]が英数字であれば次の文字に進める必要はないので、while 内を実行せずそのままchars[r]と比較し、chars[l]が空白・記号であれば英数字が現れるまでスキップしてからchars[r]と比較します。
2020.07.09 10:47
ITビギナーさん(No.3)
納得できました。
ありがとうございました。
ありがとうございました。
2020.07.09 19:26