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 =» (без кавычек).Я только начинаюЯ пытаюсь убрать op1, op2 и оператор (все строки) из этого, читая строку из файла (opString) символ за символом (как указано i в цикле for).Цикл while просто проверяет, что это не конец файла для переменной fstream.op1b и operb являются значениями bool, которые помогают определить, когда мы «знаем», каков наш первый операнд и оператор (а затем, когда мы можем выяснить оператор номер 2).
Однако, когда я извлекаю op2 из строки,мой op1 заменяется значением op2, даже когда я говорю только op2 [что угодно] = opString [i], где я давно миновал, где даже был бы op1.
Пример: если строка, поступающая из файла, имеет вид "3 + 2 =", op1 должен получить 3, oper должен получить +, а op2 должен получить 2. Однако op2 всегда заканчивается тем же, что иop1 в конце цикла.Таким образом, вместо op1 = 3, oper = +, op2 = 2, я получаю op1 = 2, oper = +, op2 = 2.
Есть ли какая-то недокументированная функция C ++, которую мне не хватает?Я не могу понять, почему это происходит.Это потому, что я в курсе?Должен ли я разорвать мою петлю?Однако я не понимаю, почему это должно иметь значение.Спасибо.