Ruby 第3回分
最終更新 : 15:34 2011/10/13
今回は文字を扱います
文字の入出力や、入力した文字の操作などをメインに
プログラムの書き方の違う例などが入ってきます。
第3回分
急ごしらえで3回目分を作らざるを得ない。
文字列と扱い方
Rubyで文字列を扱う場合には、文字として扱いたいものを' 文字列 'のように、 ' ' or " " で囲って表現します。
色々と使い分けはあるらしいですが今回3回目の課題で
">>>#{string}<<<"のように書いた方が出力がしやすいので
"こちら"を使うのがいいかもしれません
急ごしらえなので課題に必要なところだけ
- 入力した文字の数
- 片方や両端の空白をとった文字列とその長さ
- 真ん中の空白の繰り返しを除去した文字列とその長さ
- 大文字だけで右そろえ (文字の合計の長さが 50)
- 文字の大小を逆転して左そろえで、右側に合計50文字まで "..." で埋める
- 文字列の文字の順番を逆にして、50 文字の真ん中そろえ
- それ以外に三つの面白い文字操作
まず文字を入力させるには資料にも書いてありますが
変数 = gets
のように gets を使って変数に格納します。
ただEnterキーで入力を完了させる都合上、改行文字が入ります。
EmEditorなどを使っていると目にする行の折り返しの"↓"がそうです
フォーラムにもありますが、
変数 = gets.chomp
と書けば最後の改行文字が削除された文字列が格納されます。
文字数計算
文字数計算は 文字列.length で行います。
.chompを使っていない場合は1文字多くなることに気をつけてください
空白を取った文字列
空白は 文字列.lstrip 文字列.rstrip です
この文字列を変数に入れて、文字数計算メソッドを使ってもいいんですが、
文字列.lstrip.lengthと書くことで複数のメソッドを同時に使えます。
gets.chompでない場合は出力が↓のようになるので
つけたほうがいいでしょう
繰り返しの除去
繰り返しの除去は 文字列.squeeze で行います。
特に指定しなければ文字列に出てくる空白・文字関係無く2文字以上続くものを、重複を削除して1文字にします。
"___abcd___abcd___" (_=空白)という文字列の真ん中の3つの空白を削除したいときは
これはやり方が正しいかわかりませんし、順番も違う方がやりやすいかもしれませんが、
やった作業は繰り返しを除去し、左右に空白を補充しながら左右に揃えたものです。
スマートなやり方を考えてみよう
文字の左右・中央揃え
文字の揃えは
- 文字列.center
- 文字列.ljust
- 文字列.rjust
このように行います。
この数字や"a"などは引数:ひきすう と呼び
この場合は文字数とどの文字を使って指定の文字数まで埋めるかという2点を決めるパラメータです
引数は(かっこ)で括れば、メソッドを複数使用できるので
省略してもいいですが使った方がいいでしょう
文字列の反転・大小の反転
まとめたらダメな気もするけどとりあえずここに
まず文字列の反転(順番を逆にする)メソッドは
文字列.reverse で表されます。
そして文字列の中のアルファベットの大小を操作するものが4つ
文字列.capitalize
文字列.downcase
文字列.swapcase
文字列.upcase
上から
「先頭を大文字、残りを小文字にして出力」
「全て小文字にして出力」
「全ての大文字・小文字を反転させる」
「全て大文字にして出力」
というものになっています。
一番上は左右反転だけのものです。
2段目はa→A B→b のように反転しています。
3段目はAのみ大文字でほかは小文字になっています
4段目は全て大文字に揃えた後、左右を反転させています。
多分このくらいで課題は出来るんじゃないかなと思いますが
他に面白い操作を書くところでは今あるものの組み合わせで大丈夫でしょう
…のはずです。
どのようなものを求める、とは言われていないのでこちらの裁量になります。
だから適当に
まとめ
木曜になってしまったのでさらっとまとめと言うかなんと言うか
言われなくてもわかるんじゃないかなっていう気はする
来週は早めに作ろう
内容まとめ
- 文字数を数えるメソッド
- 重複や空白を消すメソッド
- 文字数を揃える・文字を補充するメソッド
- アルファベットの大小や順番を入れ替えるメソッド