質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

2131閲覧

文字列の長さの比較について

Ces_

総合スコア13

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/01/02 15:23

編集2019/01/03 15:39

前提・実現したいこと

私はつい最近プログラムをRubyにて始めたものなのですが、どうしてもわからないことがあったので質問させてもらいます。

”2つの文字列が入力され

入力は
abcde
12345
という風に改行区切りで入力され、末尾に改行が 1 つ入ります。

という条件をlengthメソッドにて文字数を求めて==で比較し、等しければ"yes"を出力し、そうでなければ"No"を出力するといったコードを書きました。
最初に書いたコード(下記に添付したコードの1つめ)では上記のもの入力したら"No"の値が帰ってきました。
色々試すと、getsに.chompメソッドをつければうまくいくことがわかりました(下記のコードの2)。

ここで気になったのですが、なぜ入力は改行含め同じ数なのにchompをつけなければうまくいかないのでしょうか。

知識がないためまとまりのない文、説明になってしまい申し訳ありません。
また、何か補足などが必要でしたら教えてくださると幸いです。
お願いします。

該当のソースコード

ruby

1#入力値は 2abcde 312345 4#という風に改行区切りで入力されます。末尾に改行が 1 つ入ります。 5 6# 1 ~~~~~~~~~~~~~~~~~ 7m = gets 8n = gets 9 10if m.length == n.length 11 puts "Yes" 12else 13 puts "No" 14end 15# これでは"No"と出力されました。 16 17# 2 ~~~~~~~~~~~~~~~~~~ 18m = gets.chomp 19n = gets.chomp 20 21if m.length == n.length 22 puts "Yes" 23else 24 puts "No" 25end 26# こちらは"Yes"となりました。 27

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

chomp, chomp! (String)

chompメソッドは、文字列の末尾の改行文字を取り除いた新しい文字列を返します。

ということです

実際に各文字列の長さを表示させてみればどうでしょうか

投稿2019/01/02 15:30

編集2019/01/02 15:32
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ces_

2019/01/02 15:39

申し訳ありません、そこは理解しています。 lengthで文字数を求めて二つの文字数が等しいか比べた場合 paiza\n paiza\n は七文字*2で等しいという判定にならないのに chompをつけ改行を取り除き paiza paiza の五文字*2では等しいという判定になるのかがわからないのですがお教えいただけませんでしょうか
y_waiwai

2019/01/02 15:46 編集

だから、実際にそれぞれのその文字列の長さを表示させてみればどうでしょうか。 おそらく、あなたの思い違いがあると思いますよ 2つの文字列は paiza\n paiza\n とはなっていません
Ces_

2019/01/02 16:07

申し訳ありません。編集前のコメントに対して返信していたため編集後の文を見ないまま返信していました。 また、実際に実行してみて私が思い違いをしていることに気づきました。 この様な稚拙な質問に答えていただきありがとうございました。 今後は今回の経験を活かしプログラミングに励んでいこうと思います。
guest

0

以下のスクリプトではYESが表示されました。
windows-7でコマンドプロンプトで実行しました。
(ruby 2.4.1p111 (2017-03-22 revision 58053) [x64-mingw32])

ruby

1m = gets 2n = gets 3 4if m.length == n.length 5 puts "Yes" 6else 7 puts "No" 8end 9# これでは"No"と出力されました。 10

以下実行結果(スクリプト名はgoo2a.rb)
D:\goo\ruby>ruby goo2a.rb
paiza
paiza
Yes

おそらく環境の違いかもしれません。
あなたの実行環境を詳しくていじしていただけると何か判るかも知れません。
OS、rubyのバージョン、どうやって実行したのか(コマンドプロンプトか、端末か、なにかのツール上か等)

投稿2019/01/02 15:49

tatsu99

総合スコア5424

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ces_

2019/01/02 16:12

申し訳ありません。 実行環境を書いたつもりが向けていました。 実はpaizaのサイトでの実行だったのでそのサイトの仕様を理解していない私のミスでした。 今後は今回の経験を活かし、実行環境はもちろん、ツールなどの仕様にも気を付けていきたいと思います。 こんな遅い時間に回答していただきありがとうございました。
guest

0

これ載せて良い問題なんでしょうか?

Paiza規約に抵触していませんか?

https://paiza.jp/guide/kiyaku

第11条(禁止行為)

(3)ブログ・SNS等の各種媒体(インターネット媒体に限られず、不特定多数が閲覧可能なものを全て含む。)上において、当社がpaizaで出題した問題の内容、当該問題に対する解答、解答へのヒント等の示唆およびカンニング等の不正を助長する内容等を掲載する行為。

投稿2019/01/03 15:22

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ces_

2019/01/03 15:52

私自身はあくまでchompメソッドを使った際の実行結果の違いについての質問だったためあまり意識してなかったのですが、それならばpaizaの名前を出すことやそれに関することを書く必要はなかったなと反省しました。規約に反しそうな部分を編集で削除しました。指摘していただきありがとうございました。
退会済みユーザー

退会済みユーザー

2019/01/03 15:54

これを見た他の人が制限時間無しで問題に取り組めてしまうことが最も問題なので掲載意図がどうであれ駄目でしょうね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問