unsigned short n = 0;
while (!in.eof())
{
in >> opString; //Read in string from file
//Read the string from file character by character
for (int i = 0; i < opString.size(); i++)
{
if (!op1b) //If we do not yet know our first operand (op1b = false, b stands for bool, clever naming eh?)
{ //Check if our next item is an operator. If it is...
if (!(opString[i] == '+' || opString[i] == '-' || opString[i] == '*' || opString[i] == '/' || opString[i] == '$'))
op1[i] = opString[i];
else //We finally know it since when we hit an symbol, our first number is known; do not repeat this if block
op1b = true;
n++;
}
if (op1b && !operb) //If we know our first operand but not our operator...
{
oper = opString[i]; //Find out what our operator is. Now we know it (operb = true)
operb = true;
i++; //We increment i because if we did not we'd double dip on the if statement below and wind up
} // with an operator tacked onto the beginning of the second operand
if (op1b && operb) //If we know our first operand and the operation, let's find operand #2
{
if (opString[i] == '=')
break;
else
{
op2[i-n] = opString[i];
j++;
}
}
}
cout << "Op 1: " << op1.c_str() << endl << "Oper: " << oper.c_str() << endl << "Op 2: " << op2.c_str() << endl;
}
return 0;
}
我在这里所拥有的是一个程序(该程序的开始),该程序旨在从文本文件中读取字符串以将十六进制操作数相加在一起。字符串的格式为“ op1OperatorOp2 =“(减去引号)。我才刚开始我试图通过逐个字符地从文件(opString)中读取字符串(如for循环中的i所示),从其中取出op1,op2和运算符(所有字符串)。 while循环仅检查fstream变量是否不在文件末尾。 op1b和operb是bool值,有助于确定何时“知道”我们的第一个操作数和运算符(然后才知道第二个运算符)。
但是,当我从字符串中提取op2时,即使我只说过op2 [whatever] = opString [i],我的op1也会被op2的值所取代。
示例:如果从文件输入的字符串是“ 3 + 2 =“,则op1应该为3,oper应该为+,op2应该为2。但是,op2总是在结尾处与op1相同。环。因此,代替op1 = 3,oper = +,op2 = 2,我最终得到op1 = 2,oper = +,op2 = 2。
我缺少一些未公开的C ++功能吗?我不知道为什么会这样。是因为我陷入循环吗?我应该打破循环吗?我不明白为什么这应该有所作为。谢谢。
最佳答案
下次发布完整代码(带有所有磁偏角)。 op1
和op2
是std :: string吗?您尝试在op1
和op2
中写入字符,但尚未分配任何空间,即您应该在循环前使用op1.resize(SOME_SIZE)
或使用std::string::push_back
将字符附加到操作数上。