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
循环只有一个表达式。你能告诉我那是什么意思吗?
答案 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字符到达),递增计数数组中的相应字段。