paizaオンラインハッカソン7に参加してみた – セーラー服(C++, Swift)

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

当ブログでは順次『paizaオンラインハッカソンVol.7 プログラミングで彼女をつくる』の回答例を上げており、基本的にはC++とSwiftでの解答例を上げている。なお、ソースコード自体はGitHubでも公開しているので、ソースコードを見たい方はそちらもご確認されたい。今回はセーラー服のお題の解答例と解説を上げたい。

今回のお題の目的

今回のお題の目的はまず単語の数が入力された後、単語が入力されるので、その単語をスネークケース ((単語と単語の間をアンダースコープ「_」でつなげる記法。プログラミングではよく使われる記法の一つでもある)) で出力するというものである。

したがって、今回は以下ができるかどうかが問われる。

  • 文字列から数値への変換
  • forループ
  • 文字列の結合

回答例

C++

参考URL: https://github.com/saitomarch/POH7/blob/master/cpp/sailor_fuku.cpp

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
string readline() {
    string str;
    getline(cin, str);
    return str;
}
int main(void){
    int times = stoi(readline());
    string str = "";
    for (int cnt = 0; cnt < times; cnt++) {
        if (!str.empty()) {
            str += "_";
        }
        str += readline();
    }
    cout << str << endl;
    return EXIT_SUCCESS;
}

Swift

参考URL: https://github.com/saitomarch/POH7/blob/master/swift/sailor_fuku.swift

let times = Int(readLine()!)!
var str = ""
for (var cnt = 0; cnt < times; cnt++) {
    if (!str.isEmpty) {
        str += "_"
    }
    str += readLine()!
}
print(str)

解説

まず。単語の数が入力されるので、それを整数型に変換する。

次に、空の文字列を定義する。

それをfor文で回し、入力された単語を結合するのだが、この際にC++ではempty()関数、SwiftではisEmptyプロパティーで空白かどうかを判定し、空白でなければアンダースコアーを結合してから入力された単語を結合するという方法を取っている。

なお、文字列の結合はC++のstd::string型、SwiftのString型共に+=演算子を使うことで行える。

最後に文字列を出力して終了である。

最後に

今回もプログラミング言語の基本が分かっていれば簡単に解ける問題だろう。特にモダンな言語では文字列を比較する機能が充実しているため、ちゃんと使いこなせるようにしよう。

タイトルとURLをコピーしました