我有4个数组代表:
并且每个数组也可以有4个值。 我希望在数组中包含所有这些元素的所有可能组合。 例如rA1a,rB1a,rC1a等。 我正在考虑创建一个结构,然后以某种方式创建这256个结构元素。 然而我完全不知道如何做到这一点 - 我的意思是创建256个元素!有人可以指点我正确的方向吗?
我想到的结构是这样的,但也许结构不是我需要的结构? 接下来我打算做的是随机选择这些256个元素中的一些,并将选中的元素放入2d数组中以进一步操作它们。但首先要做的事情!
typedef struct
{
char colour;
char shape;
char nr;
char texture;
}ST1;
答案 0 :(得分:1)
首先,在C中,如果要将结构作为ST1访问,则需要像下面这样定义它:
typedef struct ST1 {
char colour;
char shape;
char nr;
char texture;
} ST1;
其次,这是一个很好的方法。但您可能更喜欢使用枚举来获取颜色,形状,数量和纹理的值。定义这样的枚举:
enum colour_t { COLOUR_R, COLOUR_G, COLOUR_B, COLOUR_Y };
并像这样使用它:
enum colour_t c = COLOUR_R;
在回复您的评论时,我认为没有必要实例化所有256种可能性,而是根据需要创建它们。像这样:
ST1 MakeST1FromOrdinal(char n) {
ST1 retval;
retval.colour = n & 0x03;
retval.shape = (n & 0x0C) >> 2;
retval.nr = (n & 0x30) >> 4;
retval.texture = (n & 0xC0) >> 6;
return retval;
}
void main() {
char ordinal = random() % 256;
ST1 randomResult = MakeST1FromOrdinal(ordinal);
}
答案 1 :(得分:1)
此解决方案建立在每个元素有四种可能性的想法之上。如果我们得到2位来表示每个元素,则可以使用位域结构,并且作为8位值,256个值表示所有可能性。为了简化初始化,我将它们放在union
中。
不是使用项目描述本身,而是留给输出翻译。
如果您想更直接地使用它们,可以设置enum
,例如enum colours { col_r, col_g, col_b, col_y }
等等。
请注意,描述符'b'
在问题陈述中重复。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef union {
unsigned char val;
struct {
unsigned char colour: 2;
unsigned char shape: 2;
unsigned char nr: 2;
unsigned char texture: 2;
} bits;
} ST1;
const char colch [4] = { 'r', 'g', 'b', 'y' }; // descriptions
const char shpch [4] = { 'A', 'B', 'C', 'D' };
const char numch [4] = { '1', '2', '3', '4' };
const char texch [4] = { 'a', 'b', 'c', 'd' };
void show(ST1 rec)
{
printf("%c%c%c%c\n", colch[rec.bits.colour], shpch[rec.bits.shape],
numch[rec.bits.nr], texch[rec.bits.texture]);
}
int main(void)
{
ST1 feature[256];
int i;
for(i = 0; i < 256; i++) {
feature[i].val = i; // initiliase all perms
}
srand((unsigned)time(NULL));
for(i = 0; i < 5; i++) {
show(feature[ rand() % 256 ]);
}
}
节目输出:
rD4a bC4d rB2c bB4b bD3a
答案 2 :(得分:0)
您可以使用structure
个数组!就这样做:
struct abc
{
char colour;
char shape;
char nr;
char texture;
} ST1[256];
如果您想访问第5个数组的shape
,请写下:ST1[4].shape
。
答案 3 :(得分:0)
您可以采用一系列结构并使用位操作来缩小尺寸: -
struct abc
{
int colour : 2;
int shape : 2;
int number : 2;
int texture : 2;
} S[256];
因为每个变量只有4个值,每个变量只有2位就足够了。
您可以使用(。)运算符或结构指针( - &gt;)运算符使用结构,以正常方式访问它们。