1
1

More than 3 years have passed since last update.

Rubyで文字列を同じ文字で一気に置換したいと思う

Posted at

はじめに

お久しぶりです。本日は久しぶりに解いたAtCoder問題で、
自分の回答と、他の人の回答を見ていいなと思った回答を振り返っていきます。

解いた問題

私が解いた問題は、
与えられた文字列をある文字で全て置換してください」というものでした。

私の回答

置換と聞いて一番最初に思いつくのは,,,そうですねreplaceですね。
しかし、今回はどんな文字でも、指定の文字に入れ替えなければいけません。
なので、replaceではうまく行かない?と思い、諦めました。

そして、正規表現でやったらいけるのではないか?と思いましたが、
普段から正規表現になれていない+検索力のない自分に深く反省です。

結局持てる英知を結集して書いた回答がこちら

sample.rb
s = gets.chomp.to_s
r = ""
s.length.times do |time|
    r += "x"
end
puts r

与えられた文字列の長さだけxを継ぎ足していくという、
なんとも原始的な方法になってしまいました。

さらに推敲

このままでは満足行かない、ということで
他の人の回答も参考にさせていただき、
別回答を作成しました。

別解1

sample.rb
puts 'x'*gets.chomp.size

たった一行で回答できてしまうのか,,,とビビりました。
文字を演算子で繰り返し出力できるということが頭の中から完全に消去されてました。
普段こうした表現をすることが少ないからかもしれませんが、
柔軟な発想は常に持ち合わせて置きたいな、と思わされました。

別解2

sample.rb
s = gets.to_s
puts s.gsub!(/./,'x')

こちらは大本命正規表現で書かれた回答です。

/./でよかったのか...
/a-z*/(適当に書いてるので違うかもしれません。。)みたいな正規表現を書いたら、
どんな文字列でも'x'だけを返してしまうので、どうして良いかわかりませんでした。
正規表現が使われてるソース見ても、「うっ」と拒否反応がでないくらいには、
正規表現への理解を深めたいものです。

終わりに

かなり簡単な内容で、記事にするまでもないだろと呆れられてしまいそうですが、
自分の学びの定着にはなると思うので、
簡単なつまずきでも書き留めていきたいです。

日々精進ですね。それではまた。

1
1
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
1
1