C字符替换为一行

时间:2013-05-09 04:32:04

标签: c string while-loop

我一直在学习一些需要循环的聪明的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 = ' '))

2 个答案:

答案 0 :(得分:3)

我建议使用以下代码。以下代码位于一行中,它避免调用函数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()函数

的情况下提出了解决方案的原因

答案 1 :(得分:3)

这是一种相当有效且简单的方法:

for(char *p = file_text; (p = strchr(p, '\n')); *p = ' ')
    ;