Пожалуйста, объясните этот метод для сравнения строк - PullRequest
0 голосов
/ 04 июня 2010

Предположим, например, что какое-то k, которое является произвольным числом = 2 k=2, тогда есть код в C:

int wordcomp(char *p, char *q) {
   int n = k;
   for ( ; *p == *q ; p++, q++) {
      if (  *p==0 && --n == 0 )
         return 0;
   }
   return *p - *q;  
}      

Пожалуйста, объясните мне, что делает этот код? Кроме того, что означает *p-*q? Кроме того, как это реализовано в Java?

Ответы [ 6 ]

25 голосов
/ 04 июня 2010

, пожалуйста, объясните мне, что делает этот код?

Сравнивает два слова

и что означает *p-*q?

Это означает, Скажите мне значение char, на которое указывает указатель p, и поместите его на символ, на который указывает указатель q.

а также как реализовать это в Java?

*p-*q часть? Вот оно.

// char c
// char k
c - k;

Если вы имеете в виду всю функцию, это может помочь вам начать:

int wordcomp( String sp, String sq) {
   int n = k; // I have no idea what is this for
   int pi = 0, qi = 0;
   for ( ; sp.charAt(pi) == sq.charAt(qi) ; pi++, qi++) {
      if (  sp.length()==pi && --n == 0 )
         return 0;
  }
  return sp.charAt(pi) - sq.charAt(qi);

Вам необходимо жестко утвердить пределы.

3 голосов
/ 04 июня 2010

Похоже, что близко к strcmp. Он берет два строковых указателя, проходит по ним до тех пор, пока не находит другой символ, а затем возвращает положительное значение, если p находится в алфавитном порядке после q, отрицательное значение, если p находится в алфавитном порядке перед q, или 0, если они одинаковы. Как утверждают другие, k пытается определить количество последовательных строк с нулевым символом в конце для сравнения, прежде чем он просто возвратит 0.

1 голос
/ 04 июня 2010

Эта функция просматривает двухсимвольные массивы, сравнивая их на равенство.

Если они неравны, возвращается * p - * q, то есть разница между значениями в первой неравной позиции. Если после к-го нуля в первой строке неравенства все еще нет, то возвращается 0.

Таким образом, он возвращает разницу между значениями в первой неравной позиции или 0, если первая строка имеет k нулей и равна до этой точки второй строке.

1 голос
/ 04 июня 2010

*p-*q означает вычитать значение, на которое указывает указатель q, из значения, на которое указывает указатель p.

это C, вычитание 2-значных значений означает вычитание их кодов ASCII.

0 голосов
/ 04 июня 2010

Сравнивает с массивами символов (словами) с набором элементов в k. Допустим, если у вас есть k = 4, это означает, что он будет сравнивать первые 4 символа. Тоже верю вместо

if (  *p==0 && --n==0)

вам нужно

if (  *p==0 || --n==0)

А также, пожалуйста, рассмотрите возможность использования p - q.

И имя функции должно быть wordcomp вместо wrodcomp.

Итак, подведем итог: что-то вроде strncmp из string.h.

0 голосов
/ 04 июня 2010

Возвращает разницу между первыми двумя несхожими char с в двухсимвольных массивах (*p и *q) максимальной длины k, т.е.

batter
batsman

Возвращает 't'-'s'

Если обе строки одинаковы для длины k и , мы достигаем нулевого символа p, мы возвращаем 0. Я думаю, что это должно быть ||, а не &&, поскольку это условия завершения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...