1. 程式人生 > >關於stringstream流的清空問題

關於stringstream流的清空問題

今天用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流每次使用後也要及時清空。第二個問題比較隱蔽,希望能引起大家注意