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

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

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

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

Q&A

解決済

2回答

2644閲覧

perlでのindexを用いた変数同士の文字列比較

milco

総合スコア20

Perl

Perlは多目的に使用される実用性が高い動的プログラミング言語のひとつです。

0グッド

0クリップ

投稿2016/01/06 05:20

編集2016/01/06 05:31

perlによって2つの変数に文字列を格納し、それらが一致するかどうかを出力するプログラムを作成しているのですが思うようにいかず困っております。
for (my $k = 0; $k <= 2; $k++){
if(index($word,$dlist[$k]) > -1){
$vec[$x] = 1;
}else{
$vec[$x] = 0;
}
print "$vec[$x],$word,$dlist[$k]";
$x = $x + 1;
}
}
dlistの各要素に文字列が格納されており、各要素についてwordとの比較を行います。
一致した場合は先に用意しておいた配列xに1を、一致しない場合は0を代入させていき、vec,word,dlistをそれぞれ出力させます。
しかしながら、実際に実行してみると文字列が一致した場合にもvecには0が格納されています。
出力例
0,りんご,りんご
0,りんご,みかん
0,りんご,ぶどう
indexによる比較で、$dlist[$k]を試しに"りんご"という文字列に差し替えてみると、正しく比較が行われます。
出力例
1,りんご,りんご
1,りんご,りんご
1,りんご,りんご
変数同士の比較がうまく言っていないのでしょうか?
ご教授お願いいたします。

追記:indexの比較の際、改行コードが片方のみに隠れて存在する場合、indexは一致すると判断してくれるのでしょうか?
indexは改行コードの有無も参照しますか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

これで動きます。

perl

1my $word = "りんご"; 2my @dlist = ("りんご","りん","りんご\n"); 3for (my $k = 0; $k <= 2; $k++){ 4 if(index($word,$dlist[$k])>-1){ 5 $vec[$k] = 1; 6 }else{ 7 $vec[$k] = 0; 8 } 9 print "$vec[$k],$word,$dlist[$k]\n"; 10}
1,りんご,りんご 1,りんご,りん 0,りんご,りんご

気になったこと

  • $x要らないのでは
  • 文字列の一致比較ならeqです。index($a,$b) > -1$a$bが含まれているかです。

投稿2016/01/06 05:33

編集2016/01/06 05:52
ozwk

総合スコア13521

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

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

0

回答ではありませんが、わたしなりに気になる点を記載いたします。
マルチバイト文字を扱う場合、そのコードをどの文字コードで書くか? が影響します。
しかし、文字コードに影響されるコードを書くべきではないと思いますので、コードは utf8 で書き、コードの先頭に(先頭あたりに)

use utf8 ;

というプラグマを挿入します。
文字コードの変換については、Encode.pm を利用すればいいかと思います。

投稿2016/01/07 15:50

yoichiro_ito

総合スコア103

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問