【问题标题】:Assigning unknown values in an array to variables将数组中的未知值分配给变量
【发布时间】:2011-06-24 11:00:02
【问题描述】:

好的,所以我有一个由 9 个整数组成的数组。有些值是给定的,有些是未知的。我如何将诸如“a”-“z”之类的整数变量分配给这些未知值?例如:

index [0] is unknown 
index [1] is 27 
index [2] is 6
index [3] is 9 
index [4] is unknown 
index [5] is 21 
index [6] is 24
index [7] is 3 
index [8] is unknown 

我想要

index [0] is a
index [1] is 27 
index [2] is 6
index [3] is 9 
index [4] is b
index [5] is 21 
index [6] is 24
index [7] is 3 
index [8] is c






  for (ii=0; ii<MAXLINE/2; ii++)
  {
    if (uniqueNumbers[ii] == UNKNOWN_INPUT)
    {

      printf("UNKOWN_INPUT at [%d]\n", ii);
    }
  }

【问题讨论】:

  • 你是如何定义未知的?不为零?
  • Array 是一个索引数据结构,用于保存相同类型的元素。为什么您的阵列有intchar 的组合?
  • 如果你需要在数组上放置负值会发生什么?
  • 我只使用正数
  • 那么……你最后做了什么?

标签: c


【解决方案1】:

int 类型的数组无法做到这一点。您可能应该用intchar 定义一个小的struct 并创建一个数组。

struct values {
    int value;
    char variable;
};

然后,如果您知道value 的值,则可以为variable 分配一个任意字符(例如' '),如果您不知道,则为一个字母。

当使用这个时,如果variable 设置为' '(或任何你定义的)然后去读取value 的值,否则处理为未知数。

【讨论】:

  • 我同意这个逻辑,但在这里联合不是更合适吗?
  • 嗯,是的,不过我试图让它相对简单。
【解决方案2】:

这是一个很好的问题。在 C 中实际上没有直接的方法可以做到这一点,因为类型系统虽然很弱,但确实强制您为每个变量选择一个类型,这意味着如果没有一些额外的结构,您将无法让数组元素成为一个 int 或对变量的引用。

做到这一点的一种方法是让你的数组元素每个都是一个标记的联合,比如这个:

typedef struct {
    enum { Constant, Variable } type;
    union {
        int value; // If this is a constant
        int* ref;  // If this is a reference to a variable
    } value;
} Expression;

现在,您的数组元素可以是常量(其中设置了值字段)或变量,在这种情况下,引用字段将是指向保存该值的实际变量的指针。

如果这不是您想要的,您可以轻松地进行修改。如果您想存储符号引用而不是硬引用(例如,要存储一个条目是“变量 X”而不是“指向其他值的指针”),您可以添加另一个枚举常量和一个保存名称的字段变量。

【讨论】:

【解决方案3】:

扩展@Argote 的答案,干净的解决方案是使用数组

struct Value {
    union {
        char var;
        int  i;
    } v;
    bool value_known;
};

快速破解方法是使用值-'a'-'z' 作为变量。这仅在您的值始终为非负数时才有效。

【讨论】:

    【解决方案4】:

    如果你想要为任何值为 -1 的值打印一个字母,那么你需要在你的输出例程中加入对这个代码的支持。

    【讨论】:

      【解决方案5】:

      由于您似乎没有使用负值(您用 -1 标记未知),您可以只使用字符的负 ASCII 值来存储此信息。

      index [0] is a (-97)
      index [1] is 27 
      index [2] is 6
      index [3] is 9 
      index [4] is b (-98)
      index [5] is 21 
      index [6] is 24
      index [7] is 3 
      index [8] is c (-99)
      

      打印时使用(char)(-1 * index[i])

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-03-27
        • 2021-10-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-12
        • 2015-12-14
        相关资源
        最近更新 更多