首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分级算法:可读性与紧凑性

分级算法:可读性与紧凑性
EN

Software Engineering用户
提问于 2012-09-02 15:11:34
回答 7查看 1.3K关注 0票数 5

请考虑以下考试/面试问题:

在C:void strcpy(char *destination, char *source);中实现strcpy()函数

strcpy函数将source指向的C字符串复制到destination__指向的数组中,包括终止空字符。假设destination指向的数组的大小足以包含与source__相同的C字符串,并且在内存中不与source__重叠。

假设你是面试官\主考人,你对这个问题如何打分?

1)

代码语言:javascript
复制
void strcpy(char *destination, char *source)
{
  while (*source != '\0')
    {
      *destination = *source;
       source++;
       destination++;
    }
    *destination = *source;
}

2)

代码语言:javascript
复制
void strcpy(char *destination, char *source)
    {
       while (*(destination++) = *(source++)) ;
    }

第一个实现是直接的-它是可读的和程序员友好的。

第二个实现更短(一行代码),但对程序员不太友好;要理解这段代码的工作方式并不容易,如果您不熟悉代码中的优先级,那么这就是一个问题。

我想知道,在面试官的眼中,第一个答案是否会显示出更多的复杂性和更先进的思维,尽管这两种算法的行为都是一样的,尽管代码可读性被认为比代码紧凑更重要。在我看来,由于这个紧凑的算法更难实现,它将在考试中表现出更高的思维水平作为答案。然而,面试官也可能会认为第二个答案不好,因为它是不可读的。

我还想提到的是,这并不是本示例所特有的,而是实现算法时代码可读性与紧凑性的一般情况,特别是在考试\访谈中。

EN

回答 7

Software Engineering用户

回答已采纳

发布于 2012-09-02 15:26:25

第二个答案显示开发人员更好地理解C边缘的情况。然而,第一个版本更容易阅读和理解,因为它不需要理解这些边缘的情况。

如果你被问到这个问题,问面试官或考官他们在找什么。如果有疑问,每次都使用可读的代码而不是紧凑的代码。面试官和主考人可以很快地达到决策疲劳,使他们更容易,这将帮助你。

如果面试官或考官想要更多,先做可读的版本,然后给他们第二个版本,并解释它的工作原理。这也会对你有帮助,因为你可以在概念上跳得更短。

票数 8
EN

Software Engineering用户

发布于 2012-09-02 18:40:19

在C语言中,x++=y++一词非常常见,因此很容易理解,与较长的x=y;x++;y++;在可能的情况下相比,它更好地表达了意图。这就留下了终止循环的检查。

代码语言:javascript
复制
while(*source != '\0')

vs

代码语言:javascript
复制
while(*source)

vs

代码语言:javascript
复制
while(*destination++ = *source++){}

理解第二和第三项取决于理解两件事:C认为零为假,一切非零为真,赋值运算符返回结果。

这两种方法都应该在初级C程序员中根深蒂固,并且很容易被来自另一种语言的程序员所掌握。

总之,我不认为第二个更难读,事实上,在C程序的上下文中,发现第一个更难读--在没有++的语言中,当然需要第一个,但是用langauge a编程,就好像它是B语言一样令人困惑。“为什么这段代码会这样做”的问题比“这段代码在做什么”要难得多,而非标准用法让我问为什么.

现在,如果您想以某种原因将这些标记下来,请不要再看那些缺乏评论的地方。在处理指针时,这些未声明的限制只是乞求错误。

票数 6
EN

Software Engineering用户

发布于 2012-09-02 15:28:39

一般来说,如果我在面试中要求人们编写代码,我想看看他们是否编写了我想要调试和维护的代码。这会让我更喜欢像第一个例子那样的答案。

然而,问这个特定问题的人可能是在测试受访者是否知道第二个例子中非常常见的strcpy成语。这是对他们对指针和C的知识的测试,而不是对代码的可读性或紧凑性的测试。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/163382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档