как отдельно извлекать целые числа и символы из строки

Есть строка которая лежит текстовом файле "8 9 + 1 7 - *". Как я могу получать из строки целые числа и класть их на стек к примеру? И в дальнейшем с ними оперировать. А символы получать отдельно. Если я могу только получать строку посимвольно. А если у меня в строке будут двузначные или более числа например 876 то оно разложиться по символам 8 7 6 и я не смогу его нормально извлечь.


#include <string>
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <deque>
#include <algorithm>
#include <utility>
#include <iterator>
#include <cstdio>


using namespace std;


int main(){

    ifstream in("input.txt");
    ofstream out("output.txt");

    stack <int> st;

    int value, i = 0;
    char ch;

    string str;

    while (!in.eof()) {
        getline(in,str); // получил строку
    }

    for (int i = 0; i < str.length(); i++) {
        ......// бегаю по ней. Могу только получать по одному символу
    }



    //или без строки сразу на прямую из файла 2-ой способ

    while(!in.eof()){
         if(in >> value){
              st.push(value);
          }

         if(!in.eof){
             in.clear();
             in.unget();

             in >> ch;

         }
    }

   // так получается, но всегда когда числовая последовательность прекращается приходится отчищать 
//поток и переходить в начало потока, из-за этого получается очень медленно,
// а у меня в задаче стоит ограничение по времени.


}

Ответы (1 шт):

Автор решения: IR42
stack<int> st;
char ch;
int i;

while (in >> ch) {
    // если считанный симол - цифра
    if (isdigit(ch)) {
        // возращаем символ в поток
        in.putback(ch);
        // считываем как число
        in >> i;
        st.push(i);
    }
    else {
        // обработать символ ch
    }
}
→ Ссылка