3

这是一个经典问题,其中必须处理元素列表,但第一个元素的处理方式必须与其他元素不同。例如打印一个字符串,以便每两个字符之间有一个破折号。

这是一个相当可怕的例子

    char *text = "hello";

    for (int i = 0; i < strlen(text); i++) {

            if (i == 0) {
                    printf("%c", text[i]);
            } else {
                    printf("-%c", text[i]);
            }
    }

输出:

h-e-l-l-o

首先,这种情况是否有一个通用名称,以便我可以正确查找?

其次,当然,处理这类问题的更好方法是什么?“更好”是更少的代码行、更快的运行时间或更低的内存开销(最好是它们之间的愉快妥协)。

以任何语言发布示例代码。

4

2 回答 2

3

坚持使用您编写的原始 C,通常最好将特殊情况排除在循环之外,因为循环是为了重复相同的任务。我会将代码编写为:

char *text = "hello";

printf("%c", text[0]);
for (int i = 1; i < strlen(text); i++){
    printf("-%c", text[i]);
}

通常最后一个也可能是一种特殊情况,在这种情况下,您将循环直到strlen(text) - 1。当然,如果您使用的是专门处理此问题的 API 语言,那么就像在@TylerEaves 回答中一样使用它们。我不知道此类问题的任何具体名称,但是每当您调整循环边界时,请始终注意一个错误的错误

于 2013-10-03T14:03:55.993 回答
0

在 python 中,您的示例是一个简单的 "-".join(list(text))

所以,.join 是 String 类的一个方法。它将单个列表(数组)作为参数,并在列表中的项目之间插入字符串。list 函数在传递一个字符串时返回一个字符列表。

口译会议扩展我的评论

>>> test = "this is a string"
>>> list(test)
['t', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 's', 't', 'r', 'i', 'n', 'g']
>>> "-".join(list(test))
't-h-i-s- -i-s- -a- -s-t-r-i-n-g'
于 2013-10-03T13:47:27.223 回答