栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

like_text如何工作?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

like_text如何工作?

看起来函数确实根据参数顺序使用了不同的逻辑。我认为有两件事在起作用。

首先,请参见以下示例:

echo similar_text('test','wert'); // 1echo similar_text('wert','test'); // 2

似乎正在测试“在param2中找到param1的任何不同字符的次数”,因此,如果在周围交换参数,结果将有所不同。据报道,它是一个错误,已被关闭为“按预期工作”。

现在,以上对于PHP和javascript实现都是 相同
的-参数表顺序会产生影响,因此说JS代码不会执行此操作是错误的。在Bug条目中认为这是预期的行为。

其次-看起来不正确的是MYSQL /
PHP单词示例。这样,javascript版本给出了3个与参数顺序无关的参数,而PHP提供了2个和3个参数(由于这个原因,百分比也同样不同)。现在,短语“
PHP IS GREAT”和“ WITH
MYSQL”应该共有5个字符,这与您进行比较的方式无关:H,I,S和T,每个字符一个,再加上一个空格。为了使它们具有3个字符,分别为“
H”,“’和’S”,因此,如果您查看顺序,则正确的答案应该是两种方式都为3。我将C代码修改为可运行的版本,并添加了一些输出,因此可以看到那里发生了什么(prepad
link):

#include<stdio.h>static void php_similar_str(const char *txt1, int len1, const char *txt2, int len2, int *pos1, int *pos2, int *max){  char *p, *q;  char *end1 = (char *) txt1 + len1;  char *end2 = (char *) txt2 + len2;  int l;  *max = 0;  for (p = (char *) txt1; p < end1; p++) {    for (q = (char *) txt2; q < end2; q++) {      for (l = 0; (p + l < end1) && (q + l < end2) && (p[l] == q[l]); l++);      if (l > *max) {        *max = l;        *pos1 = p - txt1;        *pos2 = q - txt2;      }    }  }}static int php_similar_char(const char *txt1, int len1, const char *txt2, int len2){  int sum;  int pos1, pos2, max;  php_similar_str(txt1, len1, txt2, len2, &pos1, &pos2, &max);  if ((sum = max)) {    if (pos1 && pos2) {      printf("txt here %s,%sn", txt1, txt2);      sum += php_similar_char(txt1, pos1,       txt2, pos2);    }    if ((pos1 + max < len1) && (pos2 + max < len2)) {      printf("txt here %s,%sn", txt1+ pos1 + max, txt2+ pos2 + max);      sum += php_similar_char(txt1 + pos1 + max, len1 - pos1 - max,       txt2 + pos2 + max, len2 - pos2 - max);    }  }  return sum;}int main(void){    printf("Found %d similar charsn",        php_similar_char("PHP IS GREAT", 12, "WITH MYSQL", 10));    printf("Found %d similar charsn",        php_similar_char("WITH MYSQL", 10,"PHP IS GREAT", 12));    return 0;}

结果输出:

txt here PHP IS GREAT,WITH MYSQLtxt here P IS GREAT, MYSQLtxt here IS GREAT,MYSQLtxt here IS GREAT,MYSQLtxt here  GREAT,QLFound 3 similar charstxt here WITH MYSQL,PHP IS GREATtxt here TH MYSQL,S GREATFound 2 similar chars

因此,可以看到,在第一个比较中,该函数找到了“ H”,“”和“ S”,但没有找到“ T”,并得到了3的结果。第二个比较发现了“ I”和“
T”,但没有找到’H’,’‘或’S’,因此得到2的结果。

从输出中可以看到产生这些结果的原因:算法从第二个字符串包含的第一个字符串中取出第一个字母,对其进行计数, 然后从第二个字符串中丢弃之前的char
。这就是为什么它错过了中间的字符,这就是在更改字符顺序时引起差异的原因。

发生的事情可能是故意的,也可能不是故意的。但是,这不是javascript版本的工作方式。如果您在javascript版本中打印出相同的内容,则会得到以下信息:

txt here: PHP, WITtxt here: P IS GREAT,  MYSQLtxt here: IS GREAT, MYSQLtxt here: IS, MYtxt here:  GREAT, QLFound 3 similar charstxt here: WITH, PHP txt here: W, Ptxt here: TH MYSQL, S GREATFound 3 similar chars

显示javascript版本以不同的方式实现。javascript版本的作用是在第一次比较中发现’H’,’‘和’S’的顺序相同,而在第二次比较中发现相同的’H’,’‘和’S’-因此在这种情况下,参数的顺序无关紧要。

由于javascript旨在复制PHP函数的代码,因此其行为必须相同,因此我根据对@Khez和该修复程序的分析提交了错误报告,该错误报告现已合并。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/375660.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号