我一直在学习一些聪明的C函数,它们需要一个循环,但是没有循环体来执行(比如strcpy()
),因此只有一行。
只是出于兴趣,有没有办法将所有\n
换行符都用空格替换成这样的一行?
现在我有
char* newline_index;
while (newline_index = strchr(file_text, '\n'))
{
*newline_index = ' ';
}
我想这样做:
while (*strchr(file_text, '\n') = ' ');
当然,当strchr返回null时,我会尝试取消对空指针的引用。
我知道使用strchr是欺骗,因为它包含更多的代码,但是我想看看是否有一种单行的方法可以使用标准的c函数来实现这一点。
编辑:在一些帮助下,这是我想到的最好的:
char* newline_index;
while ((newline_index = strchr(file_text, '\n')) && (*newline_index = ' '))
最佳答案
我建议使用以下代码下面的代码在一行中,它避免了函数的调用:
char* p = file_text;
while(*p!='\0' && (*p++!='\n' || (*(p-1) = ' ')));
您还可以使用
strchr()
循环:char* p;
for(p = file_text; *p!='\0' && (*p!='\n' || (*p = ' ')); p++);
对于您提供的解决方案:
char* newline_index;
while ((newline_index = strchr(file_text, '\n')) && (*newline_index = ' '))
以这种方式调用
for
将使每次搜索strchr()
时搜索都从file_text
的开头开始。我建议改为:
char* newline_index = file_text;
while ((newline_index = strchr(newline_index, '\n')) && (*newline_index = ' '))
这将允许
'\n'
从最后一个位置而不是从开始位置继续搜索strchr()
。即使进行了优化,调用
'\n'
函数也需要时间所以我提出了一个不调用strchr()
函数的解决方案