• ベストアンサー

任意の文字列から空白文字の位置を探すには?

どなたか助けて頂けないでしょうか? 任意の文字列から最初に登場する空白文字の位置を返すプログラムを作りたいのですがうまくいきません。例えば "stream line"という文字列を対象にするとして、 m = "stream line" for i in 0..m.length if m[i] == 32 ; puts i break end end とやって実行すると 6 と返って来てくれるのですが、これをdefで関数にしようとすると失敗してしまいます。自分が組んだのは def findspase(*m) for i in 0..m.length if m[i] == 32 ; puts i break end end end findspase("stream line") のようにしましたが、実行すると何も返ってきません。何がよくないのでしょうか? もし分かる方がいっらしゃいましたら是非ご教授下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • siffon9
  • ベストアンサー率64% (136/211)
回答No.1

メソッド定義の最初にpコマンドを書いてmの内容を表示させてみましょう def findspase(*m) p m #=> ["stream line"] for i in 0..m.length 以下略 mは要素1個のArray(配列)が渡されていますね。 マニュアルには 「最後の仮引数の直前に * がある場合には残りの実引数はみな配列としてこの引数に格納されます。」 とあります。 http://www.ruby-lang.org/ja/man/html/_A5AFA5E9A5B9A1BFA5E1A5BDA5C3A5C9A4CEC4EAB5C1.html#a.a5.e1.a5.bd.a5.c3.a5.c9.c4.ea.b5.c1 引数の前の*を削除することでmにString(文字列)が渡されるので期待した結果が得られると思います。 def findspase(m) p m #=> "stream line" for i in 0..m.length 以下略

namuchi
質問者

お礼

> 引数の前の*を削除することでmにString(文字列)が渡されるので期待した結果が得られると思います。 確かにできました。こんなにあっさりできたことに目からうろこです。 たいへんありがとうございました。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

あえて自分でくんでみているという話かもしれませんが、 irb(main):024:0> "stream line".index(' ') => 6 と、自作するまでもありません。

namuchi
質問者

お礼

irb というコマンド自体sakusaker7さんのおかげで始めて知りました。 まだまだ初心者なので知らないことだらけです。どうもありがとうございました。

関連するQ&A