好的,最近的一个测验条目要求学生编写一个方法'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]);
}
答案 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
):你给出的示例调用代码会不可避免地导致内存泄漏。