有什么方法可以找到 shell 脚本中两个字符串之间的 Ascii 差异。首先应该检查第一个字符,如果第一个字母相同,则应该检查两个中的第二个。就像C的strcmp函数一样。
strcmp 返回第一个不匹配字符的 ascii 值的差异。即 strcmp("hello","world") 是 -15 和 strcmp("hello","Hello") 是 32。希望你明白了。
最佳答案
你可以像这样得到两个字符的 ascii 值之间的差异:
(( $(printf %d \"$a) - $(printf %d \"$b)))
所以这应该可行:
strcmp() {
local diff
for ((i=0; i<=${#1}; ++i)); do
if ((diff=$(printf %d \""${1:i:1}") - $(printf %d \""${2:i:1}") ));
then echo $diff; return
fi
done
echo 0
}
如果一个字符串是另一个字符串的前缀,您没有指定该值应该是什么;上面使用较短字符串的尾随 NUL 字符 (0) 来计算差异。
测试:
$ strcmp hello world
-15
$ strcmp hello Hello
32
$ strcmp abc def
-3
$ strcmp def abc
3
$ strcmp def dbc
3
$ strcmp def ddc
1
$ strcmp def dgc
-2
$ strcmp def dec
3
$ strcmp def de
102
$ strcmp de def
-102
$ strcmp def def
0
$ strcmp "a b c" "a bde"
-68
$ strcmp "a b c" "a b e"
-2
关于string - 两个字符串之间的 ASCII 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19015069/