我在while循环中增加了一个指针,并减少了一个计数器。我想在计数器达到零或指针等于最大点(如果存在)时退出循环。那是一部分给我的问题。

考虑以下:

char * pIt = utf8str;
char ** pEnd = 0;
size_t nVal = 10;
while ( 0 < nVal && (pEnd && pIt < *pEnd || true) )
{
    --nVal;
    ++pIt;
}

如果pEnd为null,我希望将其从比较中排除,因此pIt将没有上限。显然,上面的代码不起作用,因为当pIt >= pEnd时,“或”开始起作用,并且始终为真。

一个人怎么做?

最佳答案

好吧,让我们稍微解构一下你的情况。因此,在顶层,我们有两个部分,即计数器和迭代器,必须满足两个条件才能继续进行操作,所以我们有:

A && B

现在A是最简单的,那就是:nVal > 0(至少对我来说,要在右侧进行比较是很自然的事情)。

现在变得有些棘手。 pEndnullpIt没有上限,或者pEnd存在。意思是B == C || D。因此,让我们。
A && (C || D)

现在,如果pEnd为null,我们希望它为true,对吗? null是false,因此当false时我们希望为true,那么我们该怎么做? !pEnd。那给我们C。

最后我们得到D。pIt有一个上限。 pIt < *pEnd

让我们放在一起,我们有:
nVal > 0 && (!pEnd || (pIt < *pEnd))

希望这可以帮助!

10-06 12:16