c - 在 C 中表示对象或处理多值返回的方式

标签 c object

我想知道您是否可以提供帮助,我正在尝试将一些用 javascript 编写的代码“转换”为“C”代码,但我不确定如何处理该对象:

function updateObj(o, k) {
  return {
    n: o.n + 1,
    way: k + "-" + o.way
  }
}

function steps(k) {
  if (k == 1) {
    return {
      n: 2,
      way: "1-0<BR>"
    };
  }
  let case1 = updateObj(steps(k - 1),k);
  for (i = 2; k % i > 0; i++);
  if (k == i) {
    return case1;
  }
  let case2 = updateObj(steps(k / i),k);
  if (case1.n < case2.n) return case1
  else return case2;
}

document.write(steps(291).way);

您如何将其转移到“C”? 这是我的尝试:

#include <stdio.h>
#include <conio.h>
#define MIN(x, y) (((x) < (y)) ? (x) : (y))


int steps(int num);

int main() {
    int res;
    res = steps(150);

    _getch();
    return 0;
}

int steps(k)
{

    int i = 0;
    if (k == 1) return 1;
    for (int i = 2; k%i > 0; i++);
    if (k == i) {
        return steps(k - 1);
    }
    return 1 + MIN(steps(k - 1), steps(k / i));
}

最佳答案

javascript 到“C”代码的紧密映射示例。

// Include needed headers.
#include <stdio.h>
#include <stdlib.h>

// Form a struct
typedef struct {
  int n;
  char *way;  // Code will need to manage the strings - oh the joy of C!
} function;

function updateObj(function o, int k) {
  // Body left for OP to implement
  // Determine concatenation memory needs
  // Allocate
  // Concatenate
  // Free `o` resources
  // Form `function`
}

function steps(int k) {
  if (k == 1) {
    //     v---Compound Literal -----------------------v  Since C99
    return (function) {.n = 2, .way = strdup("1-0<BR>")};
  }
  function case1 = updateObj(steps(k - 1), k);
  int i;
  for (i = 2; k % i > 0; i++) {
    ;
  }
  if (k == i) {
    return case1;
  }
  function case2 = updateObj(steps(k / i), k);
  if (case1.n < case2.n) {
    function_free(case2);  // need to free resources in case2
    return case1;
  } else {
    function_free(case1);  // need to free resources in case1
    return case2;
  }
}

int main() {
  function f = steps(291);
  puts(f.way);
  function_free(f);
}

关于c - 在 C 中表示对象或处理多值返回的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53500595/

相关文章:

c - linux 函数 inet_ntoa 会导致 dns 查询吗?

c - 使用终端而不是 Xcode 运行 C 脚本

c# - 如何在不显式创建类的情况下创建要传递的临时对象?

javascript - 在 Angular 模板中循环遍历 Javascript 对象和子对象

python - 如何将一个 Python 对象的所有属性复制到另一个对象?

c - C 中的 AES CBC 模式

ios - 快速更改 .h View Controller 文件中的变量

c - fatal error : sdl. h:没有那个文件或目录

c# - 如何从对象中的对象抽象值?

javascript - 向 JS 多维对象添加新数据