Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于双字符串比较的C case语句_C_If Statement_Strcmp - Fatal编程技术网

用于双字符串比较的C case语句

用于双字符串比较的C case语句,c,if-statement,strcmp,C,If Statement,Strcmp,我觉得必须有一个更好的方法来做到这一点,而不是我尝试了很长的路。我有两个令牌(令牌3和令牌4),它们可以是字符串R1到R6。我也有相同名称的int变量,R1到R6。我基本上希望案件陈述是 (名称token3的变量)+=(名称token4的变量) 我实现这一点的方式似乎很荒谬,而且过于重复,但我不知道另一种方式。必须有一些方法来简化这件事,对吗 // ADD COMMAND else if (!strcmp(token2_instr, "ADD")) {

我觉得必须有一个更好的方法来做到这一点,而不是我尝试了很长的路。我有两个令牌(令牌3和令牌4),它们可以是字符串R1到R6。我也有相同名称的int变量,R1到R6。我基本上希望案件陈述是

(名称token3的变量)+=(名称token4的变量)

我实现这一点的方式似乎很荒谬,而且过于重复,但我不知道另一种方式。必须有一些方法来简化这件事,对吗

        // ADD COMMAND
        else if (!strcmp(token2_instr, "ADD")) {
            printf("%s\n", token2_instr);
            token3_arg1 = strtok_r(NULL, ", ", &line_save);
            token4_arg2 = strtok_r(NULL, " \n", &line_save);
            int num = atoi(token4_arg2);

            // ADD Reg, Reg
            if (num == 0) {             
                if (!strcmp(token3_arg1, "R1")) {
                    if (!strcmp(token4_arg2, "R1"))
                        R1 += R1;
                    else if(!strcmp(token4_arg2, "R2"))
                        R1 += R2;
                    else if(!strcmp(token4_arg2, "R3"))
                        R1 += R3;
                    else if(!strcmp(token4_arg2, "R4"))
                        R1 += R4;
                    else if(!strcmp(token4_arg2, "R5"))
                        R1 += R5;
                    else if(!strcmp(token4_arg2, "R6"))
                        R1 += R6;   
                }
                else if(!strcmp(token3_arg1, "R2")) {
                    if (!strcmp(token4_arg2, "R1"))
                        R2 += R1;
                    else if(!strcmp(token4_arg2, "R2"))
                        R2 += R2;
                    else if(!strcmp(token4_arg2, "R3"))
                        R2 += R3;
                    else if(!strcmp(token4_arg2, "R4"))
                        R2 += R4;
                    else if(!strcmp(token4_arg2, "R5"))
                        R2 += R5;
                    else if(!strcmp(token4_arg2, "R6"))
                        R2 += R6;   
                }
                else if(!strcmp(token3_arg1, "R3")) {
                    if (!strcmp(token4_arg2, "R1"))
                        R3 += R1;
                    else if(!strcmp(token4_arg2, "R2"))
                        R3 += R2;
                    else if(!strcmp(token4_arg2, "R3"))
                        R3 += R3;
                    else if(!strcmp(token4_arg2, "R4"))
                        R3 += R4;
                    else if(!strcmp(token4_arg2, "R5"))
                        R3 += R5;
                    else if(!strcmp(token4_arg2, "R6"))
                        R3 += R6;   
                }
                else if(!strcmp(token3_arg1, "R4")) {
                    if (!strcmp(token4_arg2, "R1"))
                        R4 += R1;
                    else if(!strcmp(token4_arg2, "R2"))
                        R4 += R2;
                    else if(!strcmp(token4_arg2, "R3"))
                        R4 += R3;
                    else if(!strcmp(token4_arg2, "R4"))
                        R4 += R4;
                    else if(!strcmp(token4_arg2, "R5"))
                        R4 += R5;
                    else if(!strcmp(token4_arg2, "R6"))
                        R4 += R6;   
                }
                else if(!strcmp(token3_arg1, "R5")) {
                    if (!strcmp(token4_arg2, "R1"))
                        R5 += R1;
                    else if(!strcmp(token4_arg2, "R2"))
                        R5 += R2;
                    else if(!strcmp(token4_arg2, "R3"))
                        R5 += R3;
                    else if(!strcmp(token4_arg2, "R4"))
                        R5 += R4;
                    else if(!strcmp(token4_arg2, "R5"))
                        R5 += R5;
                    else if(!strcmp(token4_arg2, "R6"))
                        R5 += R6;   
                }
                else if(!strcmp(token3_arg1, "R6")) {
                    if (!strcmp(token4_arg2, "R1"))
                        R6 += R1;
                    else if(!strcmp(token4_arg2, "R2"))
                        R6 += R2;
                    else if(!strcmp(token4_arg2, "R3"))
                        R6 += R3;
                    else if(!strcmp(token4_arg2, "R4"))
                        R6 += R4;
                    else if(!strcmp(token4_arg2, "R5"))
                        R6 += R5;
                    else if(!strcmp(token4_arg2, "R6"))
                        R6 += R6;   
                }
            }
            // ADD Reg, Immediate
            else {
                if (!strcmp(token3_arg1, "R1"))
                    R1 += num;
                else if(!strcmp(token3_arg1, "R2"))
                    R2 += num;
                else if(!strcmp(token3_arg1, "R3"))
                    R3 += num;
                else if(!strcmp(token3_arg1, "R4"))
                    R4 += num;
                else if(!strcmp(token3_arg1, "R5"))
                    R5 += num;
                else if(!strcmp(token3_arg1, "R6"))
                    R6 += num;      
            }

        }

这是一个丑陋的攻击,但至少它避免了重复和strcmp()链:


这是一个丑陋的攻击,但至少它避免了重复和strcmp()链:


通过引入正确的数据结构,可以优雅地解决这个问题。保罗·格里菲斯在评论中提到了这一点

首先,让我们建立一个数据结构:

const int numberOfVariables = 6;

int R[numberOfVariables];
for (int i=0; i<numberOfVariables; i++) {
    R[i] = 0;
}

char* tokenNames[] = {"R1", "R2", "R3", "R4", "R5", "R6"};
Paul Griffiths通过将变量名中的数字转换为数字来查找索引。在这里,我更喜欢更灵活的方式-想象一下您有
R33

具有两个索引,最后:

R[indexToken3] += R[indexToken4];
背后的诀窍是每个
Rn
的计数器与其名称位于同一索引中


如果项目变得更大,我强烈建议编写一个查找索引的函数,甚至使用一个完成的库函数

通过引入正确的数据结构,可以优雅地解决这个问题。保罗·格里菲斯在评论中提到了这一点

首先,让我们建立一个数据结构:

const int numberOfVariables = 6;

int R[numberOfVariables];
for (int i=0; i<numberOfVariables; i++) {
    R[i] = 0;
}

char* tokenNames[] = {"R1", "R2", "R3", "R4", "R5", "R6"};
Paul Griffiths通过将变量名中的数字转换为数字来查找索引。在这里,我更喜欢更灵活的方式-想象一下您有
R33

具有两个索引,最后:

R[indexToken3] += R[indexToken4];
背后的诀窍是每个
Rn
的计数器与其名称位于同一索引中


如果项目变得更大,我强烈建议编写一个查找索引的函数,甚至使用一个完成的库函数

没有
案例
标签。你的意思是什么?这看起来好像你想要一个数组或其他数据结构,而不是六个命名变量。
R1
R6
是全局的吗?
R[token3_arg1[1]-'0']+=R[token4_arg2[1]-'0']上的一些变体R1
R2
等变成一个数组,code>将在一行中完成。更好的方法是在处理字符串之前将其转换为实际的符号标记。奥拉夫,如果你是选择结束主题的人,我想说的是case结构而不是case语句,但是,我想你完全知道我的意思,你只是太迂腐了。保罗,谢谢你的建议。我想这正是我应该做的。“C案例陈述”-直接从标题开始!无论如何,“案例”是一个误用的术语。我不是透视者。文本并不能使您的意图更清晰。没有
大小写
标签。你的意思是什么?这看起来好像你想要一个数组或其他数据结构,而不是六个命名变量。
R1
R6
是全局的吗?
R[token3_arg1[1]-'0']+=R[token4_arg2[1]-'0']上的一些变体R1
R2
等变成一个数组,code>将在一行中完成。更好的方法是在处理字符串之前将其转换为实际的符号标记。奥拉夫,如果你是选择结束主题的人,我想说的是case结构而不是case语句,但是,我想你完全知道我的意思,你只是太迂腐了。保罗,谢谢你的建议。我想这正是我应该做的。“C案例陈述”-直接从标题开始!无论如何,“案例”是一个误用的术语。我不是透视者。这篇课文并没有让你的意图更清楚。