2017-09-15 44 views
0

我收到C++禁止用字將s.at(i)與一個角色進行比較?

某種-fpermissive錯誤的地方我有什麼比較s.at(I)的指針對比的錯誤。

string s; 
     cout<<"Enter the expression"; 
     getline(cin,s); 
     int i; 
     for(i=0;i<s.length();i++) 
      { 
       if(s.at(i)=="("||s.at(i)=="["||s.at(i)=="{") 
       push(s.at(i)); 
      } 
      for(i=0;i<s.length();i++) 
      { 
       if(s.at(i)=="]"||s.at(i)==")"||s.at(i)=="}") 
       { 
        x=pop(); 
        if (s.at(i)==x) 
        continue; 
        else 
        {enter code here 
         cout<<"\nInvalid expression"; 
         return 0; 
        } 
       } 
      } 
+0

「我收到一個錯誤」太寬泛。請在這裏粘貼具體的錯誤信息。 – Heri

+0

所以,你的循環確保'i'的值大於或等於零,並且小於字符串的長度,但是你也使用'std :: string :: at()'來檢查索引在編譯器變得困惑的情況下,是否處於邊界? 's [i]'在這裏工作得很好。 –

回答

1

您在雙引號包圍字符")"這使得它們串,或char *的。他們應該用單引號,如')',所以他們成爲char's。

2

考慮s.at(i)=="("

字面"("實際上是一個const char[2]類型(對於(一個元件,另一個用於一個NUL-terimator),採用==衰變成在某些情況下,如該情況下一個const char*指針。

s.at(i)返回單個char類型,該類型與const char*指針進行比較。你有用的編譯器會警告你這個錯誤。

解決方案很簡單:用'('代替,這是一個單獨的char文字。您可以將charchar進行比較。

相關問題