string - 两个字符串之间的 ASCII 差异

标签 string bash shell

有什么方法可以找到 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/

相关文章:

bash - 查找长度为 6 个字符的单词

c - 在c中反转字符串

C:查找字符串中的特定字符

java - Android,解析html,字符串中的字符串问题

bash - 如何将任意参数传递给通过SSH执行的命令?

mysql - MYSQL 接受用户输入? Shell 脚本/批处理文件

c++ - std::string 在安全位置截断 utf-8 的最佳方式

bash - 检查参数是否为路径

objective-c - 防止 bash 将 stdin 转发到 stderr

bash - 如何从用 bash 编写的 CGI 脚本中获取 POST 参数?