2016-10-27 2 views
0

Я пытаюсь помещать токены в очередь. Однако, когда я пытаюсь ввести число, имеющее более одной цифры (т. Е. 10, 123), он считывает их как отдельные цифры. Может ли кто-нибудь сказать мне, что я делаю неправильно? Я пробовал строки вставку и добавление, и ни один из них не похож на работуissue Добавление строк в строку

queue <string> getTokens(string token){ 

    int a = (int) token.length(); 
    string temp; 
    queue <string> numbers; 
    char t; 

    for (int i =0; i <a; i++){ 

     t = token[i]; 
     while (!isdigit(t)){ 
     if (t=='+' || t=='-' || t=='/' || t=='*' || t=='^'){ 
      string temp1; 
      temp1 += t; 
      numbers.push(temp1); 
      temp1.clear(); 
     } 
     else if (t=='(' || t==')'){ 
      string temp1; 
      temp1 += t; 
      numbers.push(temp1); 
      temp1.clear(); 
     } 

     else if (!isalpha(token[i-1]) && t == 'e' && !isalpha(token[i+1])){ 
      string e = "2.718"; 
      numbers.push(e); 
     } 



     else if (!isalpha(token[i-1]) && t == 'p' && token[i+1]== 'i' && !isalpha(token[i+2])){ 
      string pi = "3.14169"; 
      numbers.push(pi); 
     } 
     break; 
    } 

     //if it is one single number 
     if (!isdigit(token[i-1]) && isdigit(t) && !isdigit(token[i+1])){ 
      string tt; 
      tt += t; 
      numbers.push(tt); 
     } 


     //if there is more than one number 
     else if ((isdigit(t) && isdigit(token[i+1])) || (isdigit(token[i-1]) && isdigit(t))){ //if it is a number    

      string temp2; 
      string temp3="k"; 
      string temp4; 
      //cout << t; 

      //int j=1; 
      if(isdigit(token[i])){ 
       temp2 += t; 

       cout<<"temp2 : "<<temp2<<endl; 



       cout <<"temp3 :" << temp3<<endl; 
       //temp2.clear(); 
       temp3 +=temp2; 
      } 
      temp4.append(temp3); 
      temp4 +=temp3; 
      //cout<<"hi"<<endl; 


       cout << "This is temp4: " << temp4 <<endl; 
       //cout << "this is temp3: " << temp3<< endl; 
       //temp2.clear(); 


      //cout<<temp2 << "yo"; 
      //temp3.assign(temp2); 
      //cout << "temp3 is : "<< temp3;    

     }  

     else 
      continue; 
} 


return numbers; 

}

int main(){ 

    string expression; 

    getline(cin,expression); 
    cout << expression; 
    queue <string> ts; 
    ts= getTokens(expression); 
} 
+1

Care, чтобы объяснить, что этот код пытается сделать? Это где-то в петле? Что такое t? Что такое токен? – mascoj

+1

Нам понадобится дополнительная информация, которая поможет вам. –

+0

Пожалуйста, прочитайте о [mcve] и попробуйте предоставить его. Код, который вы здесь показываете, может буквально что-либо сделать, поскольку мы не знаем, какой тип какой-либо из переменных (кроме 'temp2') или как они инициализируются – user463035818

ответ

0

При значении каждого Итерация temp2 temp3 temp4 переменного получит сброс поэтому не имеет значения предыдущей итерации , Я думаю, что здесь вы столкнулись с проблемой. пытаются объявить его вне для цикла и очистить его после того, как вы получите желаемый выход, для последующего использования

//if there is more than one number 
else if ((isdigit(t) && isdigit(token[i+1])) || (isdigit(token[i-1]) && isdigit(t))){ 
//if it is a number    
string temp2; 
string temp3="k"; 
string temp4; 

Я надеюсь, что это может помочь