我的问题是在2d数组中找到字符串,如果它与显示二进制数字匹配
我的怜悯
string inst[37][3]={{"ld","00001","C2"},{"st","00011","C2"},{"la","00101","C2"},{"ldr","00010","C1"},
{"lar","00110","C1"},{"str","00100","C1"},{"add","01100"," "},{"addi","01101","C2"},
{"sub","01110"," "},{"neg","01111"," "},{"or","10110"," "},{"ori","10111","C2"},
{"and","10100"," "},{"andi","10101","C2"},{"not","11000"," "},{"shr","11010","C3"},
{"shra","11011","C3"},{"shl","11100","C3"},{"shc","11101","C3"},{"br","01000","C3"},
{"brl","01001","C3"},{"brlnv","01001"," "},{"brzr","01000"," "},{"brlzr","01001"," "},
{"not","11000"," "},{"brnz","01000"," "},{"brlnz","01001"," "},{"brpl","01000"," "},
{"brmi","01000"," "},{"brlmi","01001"," "},{"nop","00000"," "},{"stop","11111"," "},
{"een","01010"," "},{"edi","01011"," "},{"rfi","11110"," "},{"svi","10000"," "},
{"ri","10001"," "}};
int last=36, initial=0 , mid, index;
for(int i = 0; i < icount-1; i++)
{
//display arrays
for(int j = 0; j < 4;j++)
{
cout << input[i][j] << " ";
// this is for check first column that consist inst and then convert to binary code
if(j==0)
{
while(last>=initial)
{
mid=(last+initial)/2;
if(input[i][0]==inst[mid][0])
{ index=mid;
}
else if(input[i][0]>inst[mid][0])
{ initial=mid+1;
}
else
last=mid-1;
}
cout<<" "<<inst[index][1]<<" ";
}
}
它类似输出不显示正确的二进制代码。我真的很感激任何帮助。 谢谢。 *我不想使用return mid并创建另一个函数
答案 0 :(得分:0)
如果您重新组织了数据,那么您的搜索会变得更加简单:
struct Data_Record
{
string command;
string value;
string other;
// Here's what makes the search work better:
bool operator==(const Data_Record& dr)
{
bool is_equal = false;
if (command == dr.command)
{
if (value == dr.value)
{
if (other == dr.other)
{
is_equal = true;
}
}
}
}
bool operator<(const Data_Record& dr)
{
return command < dr.command;
}
};
const Data_Record inst[37] = { /* ... */};
Data_Record const * p_item_found = NULL;
Data_Record key = {"and", "", ""};
p_item_found = std::binary_search(&inst[0], &inst[38], key);
if (p_item != &instr[38])
{
cout << "Found it\n";
}
else
{
cout << "Item not found.\n";
}
您可以执行其他很酷的操作,例如重载operator<<
和operator>>
以获取自定义输出和输入。
编辑1:OOP层次结构
许多指令集具有共享性的组。例如,跳转或分支指令都具有目标地址。数学指令可能具有相同的操作数。
我建议使用类(或结构)的层次结构。研究&#34; C ++工厂设计模式&#34;。
class Instruction
{
public:
virtual void Print_Annotated(std::ostream& output) = 0;
virtual void Instruction_Counter Execute(void) = 0;
protected:
std::string opcode;
std::string instruction_value;
};
class Jump_Instr_Category : public Instruction
{
protected:
unsigned int destination_address;
};
class Math_Instr_Category : public Instruction
{
protected:
std::string parameter1;
std::string parameter2;
};
使用工厂模式返回指向Instruction
基类的指针。
用户的程序很简单:
std::vector<Instruction *> program;