【问题标题】:C - Concatenate all the heads of a stringC - 连接字符串的所有头部
【发布时间】:2009-10-05 03:49:18
【问题描述】:

好的,最近的一个测验条目要求学生编写一个方法“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]);
}

【问题讨论】:

  • 您能发布您的解决方案吗?最好给我们一个起点,而不是让我们从头开始编写解决方案。

标签: c string pointers


【解决方案1】:

所需字符串的长度(当输入长度为 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 完成后):您提供的示例调用代码将不可避免地导致内存泄漏。

【讨论】:

    猜你喜欢
    • 2019-05-09
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多