2

我今天有个面试,被要求写一个两个字符串连接的函数。但是在我完成之后,我听说,通常代码是可以的,但是我在那里犯了一个小错误。在家里检查过,但一切正常。有什么问题?

char * strconcat (char *S1, char *S2){
    char *S3 = new char [strlen(S1) + strlen(S2) +1];
    strcpy(S3, S1);
    strcat(S3, S2);
    return S3;   
} 
4

4 回答 4

5

嗯......我猜这都是关于要求和质量期望的。

一些东西:

  • 输入指针应该是const.
  • 你不处理new[]失败(虽然它会抛出一个异常,这可能很好)。
  • 为了提高性能,最好不要执行strcpy()/strcat()序列,因为您花费的时间比必要的走弦时间要多。
  • 从风格上讲,它有点“关闭”。它读起来很像 C 代码,但使用了 C++ 结构。
于 2013-01-23T09:37:19.510 回答
2

除了编写 C 代码(减去new)之外,您的代码不能在任何预期的地方工作,例如:

char* hellowWorld = strconcat("Hello ", "world!");

如果您不能直接说明为什么这不起作用,请尝试编译 - 错误会给您提示。

于 2013-01-23T09:37:53.523 回答
1
char * strconcat (char *S1, char *S2){
    if(S1 == NULL || S2 == NULL)
         return NULL;
    int S1_len = strlen(S1);
    int S2_len = strlen(S2);
    char *S3 = new char [S1_len + S2_len +1];
    memset(S3, 0, S1_len + S2_len +1);
    strcpy(S3, S1);
    strcat(S3, S2);  // or memcpy(S3+S1_len, S2, S2_len);
    return S3;   
}
于 2013-01-23T13:42:06.070 回答
0

看起来你在编码中混合了 C、C++ 风格。此外,您尝试使用 new 的方式也不是标准方式。您可以使其成为纯 C 方式或 C++ 方式。

看起来,他们将风格视为错误,虽然它是有效的。但你无法预测面试官的想法。

于 2013-01-23T13:14:46.097 回答