C ++ присваивает значение двум строкам одновременно - PullRequest
0 голосов
/ 10 апреля 2011
    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 ++, которую мне не хватает?Я не могу понять, почему это происходит.Это потому, что я в курсе?Должен ли я разорвать мою петлю?Однако я не понимаю, почему это должно иметь значение.Спасибо.

1 Ответ

1 голос
/ 10 апреля 2011

В следующий раз отправьте полный код (со всеми объявлениями).op1 и op2 являются std :: string?Вы пытаетесь писать символы в op1 и op2, но не выделяете пробелов, то есть вы должны либо op1.resize(SOME_SIZE) перед циклом, либо использовать std::string::push_back для добавления символов в операнды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...