如何检查单词是否按字母顺序排列

时间:2014-05-12 08:37:22

标签: bash

我想找一个bash(没有sed,awk,perl,......)来查明一个单词是否按字母顺序排列,换句话说每个字母都是。 例: bdjkz是真的, ahjmno是真的, sdgla是假的。

我已经在努力比较角色的ascii值了,所以如果有人能指出我正确的方向,那将会有很大的帮助!

由于

4 个答案:

答案 0 :(得分:2)

Pure bash解决方案(不使用外部工具),使用参数扩展来处理字符串中的字符:

function compare () {
    word=$1
    for (( pos=0; pos<${#word}-1; pos++ )) ; do
        [[ ${word:pos:1} < ${word:pos+1:1} ]] || return 1
    done
    return 0
}

使用

进行测试
for word in bdjkz ahjmno sdgla ; do
    if compare $word ; then
        echo $word ordered
    else
        echo $word not ordered
    fi
done

答案 1 :(得分:1)

如果您可以使用其他命令行工具(但不是awksedperl),您可以尝试:

[[ "YOURSTRING" = "$(echo "YOURSTRING" | grep -o '.' | sort -n |tr -d '\n')" ]] && \
  echo "Alphabetic order"
  1. [[ ... ]]正在测试表达
  2. "YOURSTRING" =字符串比较
  3. "$( ... )"以字符串
  4. 捕获内部工作输出
  5. echo "YOURSTRING" | grep -o '.'打印来自"YOURSTRING"-o '.'的一行中的每个字符:仅打印任何单个字符的匹配项 - 注意 :此选项可能需要grep的新版本)
  6. ... sort -n |对4的输出进行排序。
  7. ... tr -d '\n'重新加入5中的字符。(删除尾随的新行字符)

答案 2 :(得分:0)

您可以使用:

p='bdjkz'
q=$(fold -w1 <<< "$p"|sort|tr -d "\n")
[[ "$p" == "$q" ]] && echo "in alphabetical order" || echo "not in alphabetical order"

答案 3 :(得分:0)

s=($(echo "existingString" | grep -o .))  # put each character of input string in an array.

k=($(printf '%s\n' "${s[@]}" | sort))  # sorts the input string

if [[ "${s[*]}" == "${k[*]}"  ]]; then  # comparing the input string array with sorted array 
echo "alphabetical" 
else 
echo "not alphabetical"
fi