char linesinfo[] = "Place\n Some\n Text\n Here";
char pch = strtok(linesinfo,"\n");
int total_line = 0;
while(pch != NULL)
{
pch = strtok(NULL,"\n");
total_line++;
}
问题:我必须使用 total_line-1 还是只使用 total_line?
无需为此使用strtok()
,它会修改您尝试解决的问题不需要的字符串,通常是危险和糟糕的。
只需循环并直接计算换行符:
int total_line = 0;
const char *str;
for(str = linesinfo; *str; ++str)
total_line += *str == '\n';
这是可行的,因为 C 的比较运算符总是为 false 生成 0,为 true 生成 1。这与 egif
将任何非零值解释为真实的事实不同,并且是一个非常有用的功能。
当然,上面的内容可以通过多种方式重写,使其更简洁,例如:
if( *str == '\n' )
++total_line;
这可能会或可能不会更快,具体取决于您的具体情况。有时,如果编译器为其生成无分支代码,原始代码可能会更快,我想这对于显式if
.