想办法弄个循环把代码简化一下,该怎么处理

想办法弄个循环把代码简化一下
将dataname和“”中的数据进行对比匹配,匹配成功则赋值。
想办法弄个循环把代码简化一下!
int fuzhi(char *dataname,char *datavalue,int modu_num)
{
if(!(strcmp(dataname,"CmdData_1")))
{
Modu[modu_num].moduData.CmdData[0]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_2")))
{
Modu[modu_num].moduData.CmdData[1]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_3")))
{
Modu[modu_num].moduData.CmdData[2]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_4")))
{
Modu[modu_num].moduData.CmdData[3]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_5")))
{
Modu[modu_num].moduData.CmdData[4]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_6")))
{
Modu[modu_num].moduData.CmdData[5]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_7")))
{
Modu[modu_num].moduData.CmdData[6]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_8")))
{
Modu[modu_num].moduData.CmdData[7]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_9")))
{
Modu[modu_num].moduData.CmdData[8]=translate16(datavalue);
}
if(!(strcmp(dataname,"CmdData_10")))
{
Modu[modu_num].moduData.CmdData[9]=translate16(datavalue);
}
}

------解决方案--------------------
定义一个指针数组,用于指向这10个字符常量,然后写一个函数,这个函数的功能就是用于查找dataname,然后返回下标。
C/C++ code

/* 正确返回字符串的下标,返回-1说明没有找到。*/
int getIndex(char *dataname, int len)
{
    char *str[10] = { "CmdData_1", "CmdDate_2", ...};
    int i;
    for (i = 0; i < 10; i++)
        if (!strcmp(dataname, str[i]))
             return i;
     return -1;
}
int fuzhi(char *dataname,char *datavalue,int modu_num)
{
    int num; /* 用于接收字符串常量的下标 */
    num = getIndex(dataname);
    if (num < 0)
    {
        fprintf(stderr, "Can't find it!\n");
        return -1;
    }
    Modu[modu_num].moduData.CmdData[num]=translate16(datavalue);
    return 0;
}