如何判断出使用bash,awk或任何使用命令或脚本的字符是否长度有两个字符串?

问题描述 投票:0回答:5
字符串或单词可以有任何长度。

EG“ William Shakespeare” =“我是一个虚弱的拼写者”都是Anagrams

e.g。 “ curie夫人” =“镭来了”

bash awk sed
5个回答
4
投票
这可能对您有用:

# function to cleanup a given argument by doing this: # 1. Remove all alphanumerics # 2. Convert to all lowercasing all characters # 3. Sorting all characters # 4. Stripping all newlines prep() { fold -w1 <<< "${1//[^[:alnum:]]/}" | tr '[:upper:]' '[:lower:]' | sort | tr -d '\n' } # function to check if given 2 arguments are anagrams isAnagram() { a=$(prep "$1") b=$(prep "$2") [[ $a = $b ]] && echo "yes" || echo "no"; }
致电他们使用:

isAnagram "William Shakespeare" "I am a weakish speller" yes isAnagram "Madam Curie" "Radium came" yes isAnagram "cat" "act" yes isAnagram "cat" "cot" no
    

1
投票
easy与

Python

anagram.py脚本:

import sys s1 = sys.argv[1] s2 = sys.argv[2] fmt = '"{:s}" and "{:s}" are{:s} anargams' if sorted(s1.lower().translate(None,' \n\r\t')) == sorted(s2.lower().translate(None,' \n\r\t')): print(fmt.format(s1, s2, '')) else: print(fmt.format(s1, s2, ' NOT'))
usage:

python anagrams.py "William Shakespeare" "I am a weakish speller"

输出:

"William Shakespeare" and "I am a weakish speller" are anargams

python anagrams.py "William Shakespeare" "William Hopkins"

输出:

"William Shakespeare" and "William Hopkins" are NOT anargams



0
投票

awk -v s1="William Shakespeare" -v s2="I am a weakish speller" ' function chkTxt(s) { split(tolower(s), arr, //) asort(arr) result="" for(i=1;i<=length(arr);i++) result = result""arr[i] return result } BEGIN{ x=gsub(/[[:blank:]]/,"",s1) y=gsub(/[[:blank:]]/,"",s2) if (x+y==0 || (x&&y)) { print chkTxt(s1)==chkTxt(s2)? "True":"False" exit } print "False" }'

在这里,您将两个字符串变量传递到
s1

s2
注:对于空间/空白检查,我注意到您的示例不限制空间的数量,但是,如果有空间,则两个字符串必须至少具有一个空间。像

foo bar

f o o ba r一样。但是

foobar
barf o o
不是。
上面的代码进行检查。
    
#!/bin/bash

#set -x

i=0
for letter in {A..Z}
do
alphabet[$i]="$letter"
((i++))
done

i=0
for digits in {0..25}
do
array[$i]=0
((i++))
done

read -p "Enter first word: " word1
read -p "Enter second word: " word2

while read -n 1 letter
do

if [ -z "$letter" ]
then continue
fi
for b in "${!alphabet[@]}"
do
if [ "$letter" = "${alphabet[$b]}" ]
then
((array[$b]+=1))
break
fi
done
done < <(echo "${word1^^}")

while read -n 1 letter
do
if [ -z "$letter" ]
then continue
fi
for b in "${!alphabet[@]}"
do
if [ "$letter" = "${alphabet[$b]}" ]
then
((array[$b]-=1))
break
fi
done
done < <(echo "${word2^^}")

echo -n "Words are "
for element in "${array[@]}"
do
if [ "$element" -ne 0 ]
then echo -n "not "
fi
done

echo "anagrams"

echo
exit

和函数


0
投票

在字符串中的sort字符,并比较案例。 str1 =“ $ 1” str2 =“ $ 2”

SORTED1= $(Echo $ str1 | grep -io。| sort | tr -d”
”)
sorted2 = $(echo $ str2 | grep -io。| sort | tr -d”
”)

0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.