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
が0 以外の値を真として解釈するという事実とは異なり、信じられないほど便利な機能です。
もちろん、上記はさまざまな方法で簡潔に書き直すことができます。たとえば、次のようになります。
if( *str == '\n' )
++total_line;
正確な状況に応じて、これはより速い場合とそうでない場合があります。コンパイラがブランチのないコードを生成すると、元のコードの方が高速になる場合がありますが、明示的には難しいと思いif
ます。