C - 将字符串的所有头部连接起来

3

好的,最近一道测试题要求学生编写一个名为“longhead”(char *longhead)的方法,该方法将返回一个字符串,其中包含给定字符串中所有头部的连接。例如:

char *string = "this";
printf("%s\n", longhead(string));

输出:tththithis

我想到了一个解决方案,但仅适用于数组,并且在主方法内。我一直在努力掌握指针,通过重复这些测验问题,我相信我一定会找到正确的位置。

有没有其他解决方案?或者...可以仅使用“strlen”来完成吗?

更新:

这是我编写的仅适用于char数组的解决方案,并且在主方法内部工作:

char *toPrint = "roses";
int i, j = strlen(toPrint); 
char toPrintArray[j];
for(i = 0; *toPrint != 0; toPrint++, i++){
    toPrintArray[i] = *toPrint;
}
int k;
for(i = 0; i < j; i++){
    for(k = 0; k < i; k++)
        printf("%c", toPrintArray[k]);
}

你能发布你的解决方案吗?最好给我们一个起点,而不是让我们从头开始编写解决方案。 - John Kugelman
1个回答

5

当输入长度为N时,期望字符串的长度为(N * (N+1)) / 2(整数1到N的和,有时也称为“高斯公式”)。因此...:

char* longhead(const char* s)
{
    int len = strlen(s);
    char * result = malloc(1 + (len * (len+1))/2);
    char * p = result;
    int i;

    for(i=1; i<=len; ++i) {
      memcpy(p, s, i);
      p += i;
    }
    *p = 0;

    return result;
}

当然,调用方必须对结果负责(在完成后使用free释放它):你所提供的调用代码示例将不可避免地导致内存泄漏。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接