關於stringstream流的清空問題
阿新 • • 發佈:2019-01-27
今天用stringstream做型別轉換時出現了第二次轉換不正確的問題
部分程式碼如下:
getline(cin,str); //將輸入的一行字元存入str中 cin.sync(); str += "#"; //算式的最後自動加一個# cout << str << endl; while(str != "#"){ op.Push(s); //算符棧底先放一個# for(int i = 0;i < str.size();) { while((i < str.size()) && (str[i] <= '9') && (str[i] >='0')) //如果輸入的是數字 { (number*= 10) += (str[i] - '0');//組裝數字:先進的數字*10加後進的數即是組合結果,如12=1*10+2 技巧:字串可以當做字元陣列來呼叫其中的每個字元,所以出現了str[i] i++; } if(number != 0) //如果數字有效,數字入棧並清空number { string temp; // cout << number << endl; //輸出上個數字並清空number ss << number; //這兩行程式碼將整形運算元轉為了字元型 ss >> numstr; // cout << numstr << "numstr"<<endl; num.Push(numstr); //入棧 // num.GetTop(numstr); // num.Pop(temp); // cout << "temp:" << temp <<endl; ss.str(""); //stringstream物件在每次使用後需要清空 ss.clear(); //這句才起了作用,到底這個和上面那個是怎麼用的? // numstr=""; number = 0; }
第一個注意事項是sstream多次使用要呼叫clear()和str("")進行清空
第二個是由於有cin流,影響了sstream流的轉換結果,所以cin流每次使用後也要及時清空。第二個問題比較隱蔽,希望能引起大家注意