for循环的中间部分的目的

时间:2013-09-20 14:17:51

标签: c

for(i = 0; str[i]; ++i)
    ++count[str[i]];

// Change count[i] so that count[i] now contains actual position of
// this character in output array
for (i = 1; i <= RANGE; ++i)
    count[i] += count[i-1];

// Build the output character array
for (i = 0; str[i]; ++i)
{
    output[count[str[i]]-1] = str[i];
    --count[str[i]];
}

通常for循环的中间部分有一些比较,但这里的第一个for循环只有一个表达式。你能告诉我那是什么意思吗?

3 个答案:

答案 0 :(得分:5)

在C中,任何表达式都可以评估为“真值”。在这种情况下,我们会检查str[i]是否为真。如果它是'\0',那么它是假的并且循环结束 - 这样我们就可以在找到字符串的结尾后离开循环。任何其他字符值都被视为true,循环继续。

答案 1 :(得分:3)

str[i]相当于撰写str[i] != 0

答案 2 :(得分:3)

for循环为第二个参数提供表达式(比较也是表达式)。如果表达式的值不为零,则表达式将产生“真”。

如您所知,C中的字符串以NUL字符(值为0)终止,因此

for(i = 0; str[i]; ++i)
    ++count[str[i]];

真的意味着:

  

对于字符串的每个字符(从起始字符开始 - 索引为0,直到NUL字符到达),递增计数数组中的相应字段。