c - 如何以返回字符串的方式更改此代码
问题描述
如何更改此代码该函数返回前 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;
}```
解决方案
一种方法是在堆上分配一个字符串并返回一个指向它的指针。这是您的斐波那契函数的更新版本:
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;
}
推荐阅读
- reactjs - 如何创建这样的 UI 按钮?
- amazon-web-services - 如何在 S3 上托管 n 个静态站点?
- python - AttributeError:模块“mysql.connector”没有属性“cursor_cext”
- regex - Python:使用正则表达式选择一组数字
- java - 如何创建 Spring Boot 应用程序并在 Tomcat 中将其作为 .war 运行?
- android - 有没有办法用模拟器测试wifi-direct?
- visual-studio - 维护静态链接 MFC 项目与动态链接
- r - 如何规范化由所有实例的少数零值变量组成的数据?
- python - 如何在python中从上到下循环浏览图像?
- javascript - Javascript - 在子菜单处于活动状态时保持下拉菜单打开