HDU——1106排序(istringstream的使用、STLvector练习)
排序
Time Limit: 2000/1000 MS (Java/Others)????Memory Limit: 65536/32768 K (Java/Others)
 Total Submission(s): 46057????Accepted Submission(s): 13221
你的任務(wù)是:對這些分割得到的整數(shù),依從小到大的順序排序輸出。
 ?
輸入數(shù)據(jù)保證:分割得到的非負(fù)整數(shù)不會大于100000000;輸入數(shù)據(jù)不可能全由‘5’組成。
 ?
 ?
 ?
今天HDU11頁上找找還有沒有適合我這種菜鳥的水題時看別人的題解突然看到了這題。讓我想起來做過的HDU——2072統(tǒng)計單詞數(shù)。心里感覺這個東西可以進行輸入重定向,但是就是百度了半天沒百度到。還是去找了2072的代碼(好吧2072也不完全是自己寫的)。發(fā)現(xiàn)了這個玩意兒?istringstream(加上空格方便記憶,i string stream)
有了它這題寫法比百度上的題解簡單多了。偷個小懶嘿嘿
代碼:
#include<iostream>
#include<string>
#include<sstream>
#include<algorithm>
using namespace std;
int power(int n,int cishu)//主要坑點還有這個,pow函數(shù)有誤差,不如自己寫一個
{int sum=1;for (int i=1; i<=cishu; i++){sum=sum*n;}return sum;
}
int sto(const string a)//string to int轉(zhuǎn)換函數(shù)。 
{int i,sum=0;int len=a.size();for (i=len-1; i>=0; i--)//有個好處可以不管開頭的0,從后往前的話前導(dǎo)0乘以權(quán)重還是0{sum+=(a[i]-'0')*power(10,len-1-i);}return sum;
}int main(void)
{string str,k;while(getline(cin,str)){for(int i=0; i<str.size(); i++)if(str[i]=='5') str[i]=' ';//將題目中要求的5替換為空格 istringstream sin(str);//進行輸入重定向,格式為istringstream 重新定義的輸入函數(shù)名稱(源頭字符串) 		int num[1000]={},t=0,i;		while(sin>>k)//從str中向臨時變量k輸入,用這個好處就是可以直接忽略掉中間的空格跟,不管幾個{num[t]=sto(k);t++;//記錄個數(shù) }				sort(num,num+t);for(i=0; i<t; i++){if(i!=t-1)cout<<num[i]<<' ';elsecout<<num[i]<<endl;}}return 0;		
}  ?
剛學(xué)了vector和STL一些函數(shù),加上之前又去再次了解了下istringstream,發(fā)現(xiàn)重定向后可以直接進行數(shù)字或者其他的輸入,不一定要是string。因此修改了下上面的代碼并且用vector和對容器的sort,以及迭代器。
代碼:
?
#include<iostream>
#include<sstream>
#include<algorithm>
#include<vector>
using namespace std;
int main(void)
{string str;while(getline(cin,str)){for (int i=0; i<str.size(); i++){if(str[i]=='5')str[i]=' ';}int t;	vector<int>list;istringstream sin(str);while(sin>>t){list.push_back(t);}sort(list.begin(),list.end());for (vector<int>::iterator it=list.begin(); it!=list.end(); it++){if(it!=list.end()-1)cout<<*it<<' ';elsecout<<*it<<endl;}}return 0;
} 
 
轉(zhuǎn)載于:https://www.cnblogs.com/Blackops/p/5255243.html
總結(jié)
以上是生活随笔為你收集整理的HDU——1106排序(istringstream的使用、STLvector练习)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: C/C++中constkeyword
 - 下一篇: 沥青多少钱一吨啊?