Я пытаюсь сделать pu sh удваивается в стек, учитывая строку от стандартного ввода и до EOF. Строка может состоять из двойных, целых, символов и одинарных пробелов.
В настоящее время я использую функцию substring и find () для учета пробелов. Он работает большую часть времени, но для различных входных данных, в которых читается одно целое (показано ниже), функция find (), похоже, забивает любой конечный символ.
Я пытался использовать различные строковые функции, чтобы попытаться повторно реализовать способ синтаксического анализа ввода - ни одна из которых не была успешной.
while(std::getline(std::cin, string, '\n')){
for(unsigned int x = 0; x < string.size(); x++){
std::cout << "You read " << string[x] << std::endl;
if(isdigit(string[x])){
do{
// Get the number, stopping at the first instance of ws
std::string get_str = string.substr(x, string.find(' '));
std::cout << "You're converting " << get_str << std::endl;
// Convert it to a double
double num = stod(get_str);
std::cout << "You pushed " << number << std::endl;
// Push it to the stack
stack.push(number);
// Get the new increment
std::cout << "The size is " << get_str.size() << std::endl;
x+= get_str.size();
} while(string[x] >= '0' && string[x] <= '9');
}
/* else, do other things... */
При вводе
100 200 + 2 /
Вывод:
You read 1
You're converting 100
You pushed 100
The size is 3
You read 2
You're converting 200
You pushed 200
The size is 3
You read +
You read
You read 2
You're converting 2 /
You pushed 2
The size is 3
В частности, мне интересно, почему от 3-й до последней строки 'You're converting 2 / '
включает '/', когда я использовал string.find(' ')
в моем коде как разделитель. И учитывая эту проблему, как бы я мог исправить это так, чтобы только 2 были «преобразованы»?
Любая помощь и отзывы приветствуются!