//문자열을 비교하여 두 문자열의 첫 번째 문자가 동일한 영역을 반환합니다.
정적 무효 php_similar_str(const char *txt1, int len1, const char *txt2, int len2, int *pos1, int *pos2, int *max)
{
문자 *p, *q;
char *end1 = (char *) txt1 + len1;
char *end2 = (char *) txt2 + len2;
정수 l;
*최대 = 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) {
//동일한 지역정보를 저장
*최대 = 1;
*pos1 = p - txt1;
*pos2 = q - txt2;
}
}
}
}
//재귀 함수, txt1과 txt2의 동일한 문자 수를 비교합니다.
정적 int php_similar_char(const char *txt1, int len1, const char *txt2, int len2)
{
합계;
int pos1, pos2, max;
php_similar_str(txt1, len1, txt2, len2, &pos1, &pos2, &max);
if ((sum = max)) {//이런 식으로 쓰는 의미는 무엇인가요????!!!!!!
//지난번에 다른 부분의 앞부분을 반복했습니다.
if (pos1 && pos2) {
합계 += php_similar_char(txt1, pos1, txt2, pos2);
}
//다른 부분의 마지막 부분을 반복합니다.
if ((pos1 + max < len1) && (pos2 + max < len2)) {
합계 += php_similar_char(txt1 + pos1 + 최대, len1 - pos1 - 최대,
txt2 + pos2 + 최대, len2 - pos2 - 최대);
}
}
//비교 후 동일한 문자의 개수를 반환합니다.
반환 금액;
}
// 매크로 묶음인 PHP 함수 자체는 문자열 변환과 반환 값 변환을 수행하며, 메인 함수는 위의 두 함수에 의해 수행됩니다.
PHP_FUNCTION(similar_text)
{
zval **t1, **t2, **퍼센트;
int ac = ZEND_NUM_ARGS();
내부 시뮬레이션;
if (ac < 2 || ac > 3 || zend_get_parameters_ex(ac, &t1, &t2, &percent) == 실패) {
WRONG_PARAM_COUNT;
}
Convert_to_string_ex(t1);
Convert_to_string_ex(t2);
if (ac > 2) {
Convert_to_double_ex(퍼센트);
}
if (Z_STRLEN_PP(t1) + Z_STRLEN_PP(t2) == 0) {
만약 (ac > 2) {
Z_DVAL_PP(퍼센트) = 0;
}
RETURN_LONG(0);
}
sim = php_similar_char(Z_STRVAL_PP(t1), Z_STRLEN_PP(t1), Z_STRVAL_PP(t2), Z_STRLEN_PP(t2))
if (ac > 2) {
Z_DVAL_PP(퍼센트) = sim * 200.0 / (Z_STRLEN_PP(t1) + Z_STRLEN_PP(t2));
}
RETURN_LONG(심);
}
유사_텍스트를 ASCII 기준으로 비교하여 구문 문제를 고려하지 않은 것을 알 수 있다.
테스트해본 결과는 다음과 같습니다:
int main(int argc, char *argv[])
{
char *str1="웨이칸 우신";
char *str2="우신 웨이칸";
int pos1,pos2,max;
php_similar_str(str1,strlen(str1),str2,strlen(str2),&pos1,&pos2,&max);
printf("php_similar_str:%d,%d=%dn",pos1,pos2,max);
max=php_similar_char(str1,strlen(str1),str2,strlen(str2));
printf("php_similar_char:%dn",max);
system("일시중지");
0을 반환합니다.
}
php_similar_str:0,6=6
php_similar_char:6
char *str1="TCP 프로토콜 통신 작동 원리 a";
char *str2="TCPa 프로토콜 통신 작동 원리"
php_similar_str:3,4=14
php_similar_char:19