C++ std::string::find неверно работает

129
09 марта 2018, 15:15

Нужно распарсить строку, для этого необходимо найти позицию знака

^

это действие выполняю при помощи данного куска кода

 pos = 0;
 if( pos = part.find( "^" ) != std::string::npos )
 {
     n = atoi( part.substr( pos + 1 ).c_str() );
 }

при вводе строки

2*x

или

x^2

данный код работает как часы (адекватно находит позицию или отсутствие знака), но если ввести

2*x^2

то pos становиться равным 1, хотя должен быть равен 3

Answer 1

Согласно приоритету операторов

pos = part.find( "^" ) != std::string::npos

выполняется так:

сначала выполняется part.find( "^" ), результат сравнивается с std::string::npos и результат сравнения присваивается pos.

Т.е. как

pos = (part.find( "^" ) != std::string::npos)

Вы же, наверное, хотели получить функциональность

(pos = part.find( "^" )) != std::string::npos
READ ALSO
Видоизменение имен функциий

Видоизменение имен функциий

Для чего компиляторы C++ "манглят" имена функций

108
Явная загрузка DLL

Явная загрузка DLL

В связи с сложностями которые возникают в связи с импортом классов при явном подключении DLL (с помощью winapi), стоит ли его использовать, есть...

105
Проверка что в числе нет посторяющихся цифр

Проверка что в числе нет посторяющихся цифр

Есть задачка, найти сколько чисел до 1000 в которых не повторяются цифрыПытаюсь решить простым перебором, каждого числа в стринг и далее проверяю...

145
День недели и месяц с заглавной в SimpleDateFormat

День недели и месяц с заглавной в SimpleDateFormat

Для вывода даты используя формат в таком виде:

165