PaizaオンラインハッカソンVol.6に参加してみた(霧島京子ミッション, C言語)

この記事は1年以上前に掲載されたものです。 情報が古い場合がありますのでお気を付け下さい。

今回はPaizaオンラインハッカソンVol.6に参加してみた(霧島京子ミッション, C++)をC言語で記述した場合のコードを上げてみた。一度C++で成功しているので、今回はそれほど苦労することはなかった。ただ、C++で使える強力なライブラリー等が使えないのが若干面倒だったが。

回答例

解説ほか

基本的にやっていることはC++でのコードとほぼ同様のことである。ただし、C++で使えた可変長配列や文字列オブジェクトなどは使えないため、それぞれ代替の処理に置き換えている。とりあえず、異常処理系もある程度想定して書いたつもりである。

結果

cf: https://paiza.jp/poh/joshibato/kirishima/result/c8ae1056

全テストケース通過、処理時間も0.01秒だった。

最後に

これまでPOH6のそれぞれのミッションをC++で書いた場合、C言語で書いた場合の回答例と簡単な解説を挙げた。まだ不十分な点はあるものの、もしそれぞれのミッションがわからない場合は、是非当方のコードを参考にして挑戦してみてもらいたい。

ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。ご用の方はコメントかコンタクトフォームにて。

コメント

  1. sasaki より:

    ああ、すみません…-1ではなく+1ですね。そうなんです。strlen(str)+1から+1をなくしても問題なく動作したので疑問に思い質問致しました。-1は色々いじった後の手元のコードを見て誤記ってしまったようです。すみません。ご丁寧にご回答頂きありがとうございました。

  2. sasaki より:

    突然のコメント失礼致します.佐々木と申します.
    コードを拝見しました際,いくつか気になる点が出てきましたので質問させてください.(見当違いの質問があれば申し訳ありません.)

    ・12行目のstr[strlen(str) – 1] = ‘\n’;で改行文字を代入しているのは何故でしょうか.(改行文字の削除を意図している関数であれば’\0’を代入するのかと思ったのですが,なにか意図のある実装なのでしょうか.)

    ・23行目のstrncpyの第3引数のstrlen(str)-1で-1しているのは何故でしょうか.(-1は不要なように思うのですが,なにか意図のある実装なのでしょうか.)

    • SAITO Tomomi より:

      >佐々木様
      コメントありがとうございます。回答いたします。

      12行目について:
      これは明らかに当方のミスです(本来ならNULL文字を代入しなければならないが、ここでは改行コードになってしまっている)。追って修正いたします。ご指摘ありがとうございます。

      23行目について:
      これはstrlen(str)+1ですね。これはstrlenを使った場合、NULL文字は文字列の長さに含まれないことへの対策を意図しております。今回はcallocを使っているため+1がなくても実装上問題はありませんが、mallocを使った場合は問題が発生するかもしれません。

      以上の通りです。