我正在开发一个垃圾邮件检测系统,并收到警报,发现它无法检测这样的字符串 - “asdfsdf”。
我对此的解决方案涉及检测以前的键是否靠近键盘上的其他键。我没有从键盘获取输入(用于检测垃圾邮件),而是以字符串的形式获取。
我只想知道一个字符是一个键、两个键还是两个键以上的另一个字符。
例如,在现代 QWERTY 键盘上,字符 'q' 和 'w' 相距 1 个键。字符 'q' 和 's' 也是如此。人类可以从逻辑上解决这个问题,我怎么能在代码中做到这一点?
最佳答案
您可以简单地为标准 qwerty 键盘创建二维 map 。
基本上它看起来像这样:
map[0][0] = 'q';
map[0][1] = 'a';
map[1][0] = 'w';
map[1][1] = 's';
等等。
当你得到两个字符时,你只需要在上面的数组'map'中找到它们的x和y,并且可以使用毕达哥拉斯简单地计算距离。它不会满足您的要求,因为 'q' 和 's' 相距 1 距离。而是 sqrt(1^2 + 1^2) 大约 1.4
公式是:
例如:
假设您得到字符 c1='q' 和 c2='w'。检查 map 并发现'q' 的坐标为(x1,y1) = (0, 0),'w' 的坐标为(x2,y2) = (1, 0)。距离是
sqrt((1-0)^2 + (0-0)^2) = sqrt(1) = 1
关于php - 如何检测一个字符是否与 QWERTY 键盘上的另一个字符接近?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7621043/