访问C中的Struct中的某些元素

时间:2013-11-16 18:38:49

标签: c struct typedef

所以我创建了以下结构:

struct _I_TypeInstructions {
    const char *instructionName;
    char *opcode;
} I_TypeInstructions[] = { { "lw", "100011" }, { "sw", "101011" }, { "beq",
        "000100" } };
typedef struct _I_TypeInstructions I_TypeInstructionsStruct;

如果我有一个新的instructionName并且我想检查它是否在I_TypeInstructionsStruct中,我如何遍历上面结构的* instructionName部分。例如,我想写的函数看起来像

bool checkIfInstructionIsI_Type(char *instructionName) {
    // somehow iterate through instructionNames in the struct above
    // checking if parameter char *instructionName in this method is equal to 
    // "lw" "sw" "beq" but skipping over the binary numbers.
}

3 个答案:

答案 0 :(得分:1)

搜索结构列表非常简单:

bool checkIfInstructionIsI_Type(char *instructionName) 
{
    for (int i = 0; i<NumInstructions; i++)
    {
        if (strcmp(I_TypeInstructions[i].instructionName, instructionName) == 0)
        {
            return true;
        }
    }
    return false;
}

答案 1 :(得分:0)

int i;
for(i = 0; i < 3; ++i)
{
    if (strcmp(instructions[i].instructionName, instructionName) == 0)
    {
        printf("Match found");
    }
}

答案 2 :(得分:0)

返回与您的字符串匹配的实际元素通常更有用。无论如何,它的工作量相同。

在数组末尾添加一个空元素,然后你有一个结束标记。

typedef struct _I_TypeInstructions {
    const char *instructionName;
    char *opcode;
} I_TypeInstructionsStruct;

I_TypeInstructionsStruct I_TypeInstructions[] = {
{ "lw",  "100011" },
{ "sw",  "101011" },
{ "beq", "000100" },
{ 0,     0}
};

I_TypeInstructionsStruct *find_instruction(char *name)
{
    I_TypeInstructionsStruct *i ;
    for (i = I_TypeInstructions ; i->instructionName ; i++)
        if (!strcmp(i->instructionName,name)) return i ;
    return 0 ;
    }