当ブログでは順次『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
型共に+=
演算子を使うことで行える。
最後に文字列を出力して終了である。
最後に
今回もプログラミング言語の基本が分かっていれば簡単に解ける問題だろう。特にモダンな言語では文字列を比較する機能が充実しているため、ちゃんと使いこなせるようにしよう。
ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しています。主にスマートフォン向けアプリやウェブアプリの開発を携わっています。ご用の方はコメントかコンタクトフォームにて。