检测char数组中有多少行

时间:2012-09-05 09:24:59

标签: c strtok

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?

1 个答案:

答案 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来说更难。

相关问题