Paizaのスキルチェックでは、必ずと言っていいほど、値を取得して、出力する作業があります。
今回は、そのサンプルコードがあったので、その解説をしようと思います。
サンプルコード
<?php
$input_line = trim(fgets(STDIN));
for ($i = 0; $i < $input_line; $i++) {
$s = trim(fgets(STDIN));
$s = str_replace(array("\r\n","\r","\n"), '', $s);
$s = explode(" ", $s);
echo "hello = ".$s[0]." , world = ".$s[1]."\n";
}
?>
解説
最初と最後の行ですが、PHPでは<?php ?>;の中にPHPコードを入れます。
2行目に標準入力を読み取ります。fget関数で指定したファイルポインタから1行取得します。
ファイルポインタとは、読み書きしているファイルが、今どの位置を指し示しているのかを確認するものです。
STDINは、標準入力(standard input)を意味し、標準入力を読み取ります。
trim関数は、文字列の最初と最後の半角スペース、タブを削除します。
3行目から繰り返し処理を行います。変数iは、0から2行目で読み取った値まで1つずつ増加します。
4行目でさらに標準入力を読み取ります。2行目と同じです。
5行目でstr_replace関数で改行コードを削除しています。
str_replace関数の基本的な構文は以下の通りです。
str_replace( 検索文字列 , 置換後文字列 , 検索対象文字列 )
str_replace関数は検索した文字列に一致した全ての文字列を置換します。
サンプルコードでは、検索文字列が配列になっていますが、これは複数の文字を置換するためです。
改行コード3種類を’’に置換することで削除しています。
改行コードとは
コンピュータは文字をすべて文字コードで処理するように、改行を表すのに用いられるコードが改行コードです。改行コードはOSによって次のように異なります。
改行コード名 | 改行コード | OS |
CR(Carriage Return) | \r | Mac OS(9以前) |
LF(Line Feed) | \n | UNIX |
CRLF | \r\n | Windows |
このサンプルコードでは、1行目に標準出力される回数を整数として出力されて、
その後、スペースを1つ含んだ文字列が1行目に標準出力される回数分だけ出力されることを仮定したサンプルコードです。
6行目で、explode関数で文字列をスペースで区切り、分割しています。
explode関数の基本的な構文は以下の通りです。
explode(区分する文字,対象文字列,配列の最大要素数)
サンプルコードでは、スペースで4行目で読み取った文字列を分割しています。
7行目で分割した文字列を出力しています。
このサンプルコードでは、1行目に標準出力される回数を整数として出力されて、
その後、スペースを1つ含んだ文字列が1行目に標準出力される回数分だけ出力されることを仮定したサンプルコードです。
まとめ
Paizaの値取得・出力サンプルコードの解説をしてみました。
今回のサンプルコードは、説明した通り、最初に出力回数、次にスペースを含んだ文字列が出力されるような問題の場合のみ有効です。
ですので、問題によってサンプルコードを変更する必要があり、能力が問われるかと思います。
変更する上で何をやっているのかという理解は必須になるでしょう。