用C表示对象或处理多值返回的方式

时间:2018-11-27 13:15:26

标签: 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));
}

2 个答案:

答案 0 :(得分:1)

structs可能就是您想要的。

它们可用于对某种数据进行分组。为了声明一个包含整数和char指针的结构,请使用:

struct S {
  int i;
  char *c;
};

然后您可以执行以下操作:

struct S function() {
  struct S s;
  s.i = 1;
  // more code
  return s;
}

如果您的结构占用大量内存,则可能需要将其放在堆上并返回一个指针。

答案 1 :(得分:1)

将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);
}