Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 来自编程珍珠的字符串函数_C++ - Fatal编程技术网

C++ 来自编程珍珠的字符串函数

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

下面是编程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);
}

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特别喜欢这种格式。结尾是双空终止的。