同じ文字を含む単語がいくつあるかを確認してください。

同じ文字を含む単語がいくつあるかを確認してください。

2つの文字列があります。

answer="spaghetti"
guess="spgheti"

$ guessと同じ$answerの文字数を数える方法があるかどうか疑問に思います。この場合、番号7を取得する必要があります。いくつかの注意点は、$answerと$guessが変更されることです。

誰かが重複したコンテンツを投稿したと非難したので、私は2つの文字列の文字数について尋ねることを提案しました。たとえば、「Stackoverflow」と「stkflw」です。 「stkflw」の文字が「Stackoverflow」の文字と同じ数を計算したいと思います。単語のすべての文字を数えるために必要です。たとえば、「Test」は4文字であるため、4を返す必要があります(答えの1つはテストで3を返すので推奨されません)。

bashでこれを行うことができればいいでしょう! :)

ベストアンサー1

Perlでは、音訳演算子tr//(シェルユーティリティと非常によく似ていますtr)は文字列数を返します。

$ perl -e 'print("spgheti" =~ tr/spaghetti/spaghetti/, "\n")'
7

spghetiつまり、「in」には7つの文字が見つかりましたspaghetti

$ perl -e 'print("spaghetti" =~ tr/spgheti/spgheti/, "\n")'
8

spaghettiつまり、「8個の文字が見つかりましたspgheti」(tでは2回現れるのでspaghetti2回と計算されます)。

周りにループを置きます。

while read word1 word2; do
  perl -e 'printf("%s / %s: %d\n", $ARGV[0], $ARGV[1],
    eval "$ARGV[0] =~ tr/$ARGV[1]/$ARGV[1]/")' "$word1" "$word2"
done <<LIST_END
stkflw Stackoverflow
fete feet
good goodness
par rap
LIST_END

Perl呼び出しは検索と置換リストにeval()挿入できるはずです。$ARGV[1]tr//

出力:

stkflw / Stackoverflow: 5
fete / feet: 4
good / goodness: 4
par / rap: 3

または、1行に2つの単語があるファイルから読み込みます。

while read word1 word2; do
  # as before
done <wordpairs

おすすめ記事