请解释这种比较字符串的方法

时间:2010-06-04 19:38:16

标签: c pointers string

例如,假设某些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 个答案:

答案 0 :(得分:25)

  

请解释一下这段代码的用途是什么?

比较两个单词

  

还意味着 *p-*q

这意味着,告诉我指针p指向的char的值,并将其放在指针q所指向的char上。

  

以及如何在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);

您需要验证严格限制。

答案 1 :(得分:3)

看起来接近strcmp。它需要两个字符串指针,在它们上面循环,直到它找到不同的字符,然后如果p在q之后按字母顺序返回一个正值,如果p在q之前按字母顺序排列则为负值,如果它们相同则为0。正如其他人所说,k看起来定义了在它返回0之前要比较的连续空终止字符串的数量。

答案 2 :(得分:1)

*p-*q表示从指针p指向的值中减去指针q指向的值。

这是C,减去2个char值意味着减去它们的ASCII码。

答案 3 :(得分:1)

此函数循环遍历两个字符数组,比较它们是否相等。

如果它们不相等,则返回* p - * q,这是第一个不相等位置的值之间的差值。如果在第一个字符串中的第k个零之后仍然没有不等式,则返回0.

因此,它返回第一个不相等位置的值之间的差值,如果第一个字符串有k个零,则返回0,并且相等于该点到第二个字符串。

答案 4 :(得分:0)

返回最大长度为char的两个字符数组(*p*q)中前两个不相似k之间的差异,即

batter
batsman

退货 't'-'s'

如果两个字符串的长度k 相同,则我们会找到p的空字符,我们会返回0。我认为它应该是||而不是&&,因为这些是终止条件。

答案 5 :(得分:0)

它将char数组(单词)与k中的元素集进行比较。 让我们说如果你有k = 4,这意味着它将比较前4个字符。 我也相信而不是

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

你需要

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

另请考虑使用p - q

功能名称必须为wordcomp,而不是wrodcomp

总而言之,它与string.h中的strncmp类似。