首页 > 解决方案 > 如何以返回字符串的方式更改此代码

问题描述

如何更改此代码该函数返回前 n 个斐波那契数但在新字符串中,例如如果 n=10 输出将为“11235813213456”


void sprintfFibonacciNumbers(int n)
{
    int f1 = 0, f2 = 1, i;

    if (n < 1)
        return;

    for (i = 1; i <= n; i++)
    {
        printf("%d ", f2);
        int next = f1 + f2;
        f1 = f2;
        f2 = next;
    }
}

int main()
{
    sprintfFibonacciNumbers(10);
    return 0;
}```

标签: c

解决方案


一种方法是在堆上分配一个字符串并返回一个指向它的指针。这是您的斐波那契函数的更新版本:

char* sprintfFibonacciNumbers(int n) 
{
    char str_buffer[50];
    char* fib_str = malloc(1000); //need bigger number if result > 1000 characters
    if (fib_str == NULL) {
        printf("malloc failed\n");
        exit(42);
    }

    int f1 = 0, f2 = 1, i;

    for (i = 1; i <= n; i++) 
    {
        sprintf(str_buffer, "%d ", f2);  //converts f2 to a string
        strcat(fib_str, str_buffer);    //concatenates it to the result
        int next = f1 + f2;
        f1 = f2;
        f2 = next;
    }
    return fib_str;
}

然后你可以像这样使用它:

char* fib = sprintfFibonacciNumbers(10);
printf("%s\n", fib);
free(fib);  //prevent memory leak

编辑这是完整的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char* sprintfFibonacciNumbers(int n) 
{
    char str_buffer[50];
    char* fib_str = malloc(1000); //need bigger number if result > 1000 characters
    if (fib_str == NULL) {
        printf("malloc failed\n");
        exit(42);
    }

    int f1 = 0, f2 = 1, i;

    for (i = 1; i <= n; i++) 
    {
        sprintf(str_buffer, "%d ", f2);  //converts f2 to a string
        strcat(fib_str, str_buffer);    //concatenates it to the result
        int next = f1 + f2;
        f1 = f2;
        f2 = next;
    }
    return fib_str;
}

int main(void) {

    char* fib = sprintfFibonacciNumbers(10);
    printf("%s\n", fib);
    free(fib);  //prevent memory leak

    return 0;
}

推荐阅读