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?
答案 0 :(得分:4)
不需要使用strtok()
,它将修改您尝试解决的问题不需要的字符串,通常是危险和坏的。
直接循环并直接计算换行符:
int total_line = 0;
const char *str;
for(str = linesinfo; *str; ++str)
total_line += *str == '\n';
这是有效的,因为C的比较运算符总是为0生成0,为true生成1。这不同于例如if
会将任何非零值插入为真,并且是一个非常有用的功能。
当然,上述内容可以通过多种方式重新编写,以便更加简洁,例如:
if( *str == '\n' )
++total_line;
根据您的具体情况,可能会或可能不会更快。有时,如果编译器为它生成无分支代码,原始代码可能会更快,我想这对于显式if
来说更难。