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

时间:2009-10-05 03:49:18

标签: c string pointers

好的,最近的一个测验条目要求学生编写一个方法'longhead'(char * longhead),该方法将返回一个字符串,该字符串由给定字符串中所有头部的串联组成。例如:

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

输出:tththithis

我确实提出了一个解决方案,但它仅适用于数组,而且它位于main方法中。我一直试图在指针上找到一个好的立足点,我觉得通过重复这些测验问题我肯定会到达正确的地方。

有解决方案吗?或者......可以使用'strlen'吗?

更新:

这是我编写的解决方案,它仅适用于char数组,并且位于main方法中:

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]);
}

1 个答案:

答案 0 :(得分: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):你给出的示例调用代码会不可避免地导致内存泄漏。