-3
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?

4

1 回答 1

4

无需为此使用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.

于 2012-09-05T09:33:28.413 回答