C++ 来自编程珍珠的字符串函数
下面是编程pearls中字符串上的函数C++ 来自编程珍珠的字符串函数,c++,C++,下面是编程pearls中字符串上的函数 int wordncmp(char *p, char* q) { int n = k; for ( ; *p == *q; p++, q++) if (*p == 0 && --n == 0) return 0; return *p - *q; } int sortcmp(char **p, char **q) { return wordncmp(*p, *q); } ch
int wordncmp(char *p, char* q)
{ int n = k;
for ( ; *p == *q; p++, q++)
if (*p == 0 && --n == 0)
return 0;
return *p - *q;
}
int sortcmp(char **p, char **q)
{ return wordncmp(*p, *q);
}
char *skip(char *p, int n)
{ for ( ; n > 0; p++)
if (*p == 0)
n--;
return p;
}
我不明白sortcmp()做什么?skip函数是否从char*p返回非空终止部分,或者是什么?
请解释。sortcmp采用双指针(char**)作为参数,而wordncmp不采用。所以sortcmp是一种使用双指针(char**)调用wordncmp的方法。它就像一个重载函数 skip完成了您所写的操作: 跳过函数返回非空 从char*p终止的部分
我猜
sortcmp()
如果in参数p
和q
相等,则返回0;如果p
小于q
则返回正值;如果p
大于q
则返回负值。在实现排序算法时,这是一个有用的函数。这完全是猜测,因为我没有这本书的副本,但看起来这些函数用于处理由空字符分隔的“单词”序列组成的非常规字符串格式
比较第一个wordncmp()
单词,其中k
可能是调用函数之前要设置的全局变量k
sortcmp()
跳过字符串中的skip()
单词n
在C++中,最好使用标准的字符串和算法库来执行这种事情;很少有充分的理由去处理指针和非常规字符串表示。在wordncmp()中,int n被初始化为未知变量或常量k。这需要一个解释。这些功能——就目前而言——都是垃圾。您确定复制的内容正确吗?正如约翰所说,什么是
k
?另外,skip
函数是无意义的,无法工作,它总是指向p的终止字符。n--
语句在该位置上没有任何作用。@davit datuashvili:您介意编辑您的问题并更改n=k=2
而不是将其作为注释发布吗?请为将来的读者想一想?@Binary:从外观上看,函数期望的是一系列以零分隔的“字”,而不是一个以零结尾的字符串。非传统,但并非完全荒谬。@Mike Seymour:谢谢,我已经有一段时间没有在C的枷锁下工作了。看起来像是胡说八道,直到人们想起在C中处理字符串时经常犯的疯狂。我记得自己变得非常-嗯-有创造力。给我var strings=new List()。AIX特别喜欢这种格式。结尾是双空终止的。