LoginSignup
0
0

More than 1 year has passed since last update.

PHP 問題集 メモ

Last updated at Posted at 2022-06-13

★問題
あなたは、以下のようなキーボードのシミュレーションをするプログラムを作成したいと考えました。

・キーは a, b, ..., z と shift, capslock のみ
・a, b, ..., z キーと shiftキーを同時に押すと、対応する大文字が出力される
・capslockキーを押すと、再びcapslockキーが押されるまで大文字が出力される

キーボードで押されたキーが入力として与えられるので、

パソコンの画面に表示される文字列を出力してください。

★入力される値
入力は以下のフォーマットで与えられます

n
c_1
c_2
...
c_n

・入力される文字列数n
・c_1, c_2, ..., c_n は押下されたキー
・入力はn + 1行となり、末尾に改行を一つ含みます。

★期待する出力
押したキーによって表示される文字列を1行で表し、
最後に改行して出力してください。

★条件
すべてのテストケースにおいて、以下の条件をみたします。

1 ≤ n ≤ 10
c_1, c_2, ..., c_n は、以下のいずれかの文字列です。
・x
・shift x
・capslock
ただし、xは小文字アルファベット1文字(a, b, ..., z)を表します。

ただし、必ず何らかの文字列が表示されるものとし、
また、capslockキーが有効なときshiftキーは押されないものとします。

★回答

   $n = trim(fgets(STDIN));
   $s = "shift";
   $cp = "capslock";
   $cl = false;
   $count = 0;
   for ($i = 0; $i < $n; $i++) {
        $c = trim(fgets(STDIN));
        if($c === $cp && $count === 0){
            $cl = true;
            $count = 1;    
        }elseif($c === $cp && $count === 1){
            $cl = false;
            $count = 0;   
        }
        
        if(strpos($c, $s) !== false){
            $c = explode(" ", $c);
            $c = strtoupper($c[1]);
            echo $c;
        }elseif($c !== $cp && $cl == true) {
            $c = strtoupper($c);
            echo $c;
        }elseif($c !== $cp && $cl == false) {
            echo $c;
        }
  }
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0