1

私はループを必要とする賢い C 関数のいくつかについて学んできましたが、実行するループ本体はなく ( のようにstrcpy())、1 行の長さしかありません。

興味深いことに、すべての\n改行文字をスペースで置き換えることを、このように 1 行に減らす方法はありますか?

現時点では私が持っている

char* newline_index;
while (newline_index = strchr(file_text, '\n'))
{
    *newline_index = ' ';
}

私はこのようなことをしたいと思います:

while (*strchr(file_text, '\n') = ' ');

もちろん、strchr が null を返すときは、null ポインターを逆参照しようとします。

より多くのコードが含まれているため、strchr を使用するのは不正行為であることはわかっていますが、標準の c 関数を使用するだけでこれを行う 1 行の方法があるかどうかを確認したいと思います。


編集:いくつかの助けを借りて、これは私が思いついた最高のものです:

char* newline_index;
while ((newline_index = strchr(file_text, '\n')) && (*newline_index = ' '))
4

2 に答える 2

3

次のコードを提案します。次のコードは 1 行で、関数の呼び出しを回避しますstrchr()

char* p = file_text;
while(*p!='\0' && (*p++!='\n' || (*(p-1) = ' ')));

forループを使用することもできます:

char* p;
for(p = file_text; *p!='\0' && (*p!='\n' || (*p = ' ')); p++);

提供するソリューションの場合:

char* newline_index;
while ((newline_index = strchr(file_text, '\n')) && (*newline_index = ' '))

このように呼び出すと、 を検索するたびstrchr()に の先頭から検索が開始されます。file_text'\n'

次のように変更することをお勧めします。

char* newline_index = file_text;
while ((newline_index = strchr(newline_index, '\n')) && (*newline_index = ' '))

これにより、最初からではなく、最後の位置からのstrchr()検索を続行できます。'\n'

また、その最適化を行っても、strchr()関数の呼び出しにも時間がかかります。だから私はstrchr()関数を呼び出さずに解決策を提案したのです

于 2013-05-09T05:06:15.167 に答える