POJ 2418 Hardwood Species map水過,字典樹的題目

map默認初始化爲0   按鍵字典序自動排序


讓我們一起來分析一下while(getline(cin,line))語句
注意這裏默認回車符停止讀入,按Ctrl+Z或鍵入EOF回車即可退出循環。
在這個語句中,首先getline從標準輸入設備上讀入字符,然後返回給輸入流cin,注意了,是cin,所以while判斷語句的真實判斷對象是cin,也就是判斷當前是否存在有效的輸入流。在這種情況下,我想只要你的電腦不中毒不發神經你的輸入流怎麼會沒有效?所以這種情況下不管你怎麼輸入都跳不出循環,因爲你的輸入流有效,跳不出循環。
然而有些同學誤以爲while判斷語句的判斷對象是line(也就是line是否爲空),然後想通過直接回車(即輸入一個空的line)跳出循環,卻發現怎麼也跳不出循環。這是因爲你的回車只會終止getline()函數的讀入操作。getline()函數終止後又進行while()判斷(即判斷輸入流是否有效,你的輸入流當然有效,滿足條件),所以又運行getline()函數,所以,你懂了吧。。。
 撒旦

#include <iostream>
#include <cstdio>
#include <cstring>
#include <map>
using namespace std;


int main()
{
    int cnt = 0;
    map<string,int> q;
    map<string,int> :: iterator t;
    string s;
    while(getline(cin,s)){
        q[s]++;
        cnt++;
    }
    for(t = q.begin();t!=q.end();t++){
        printf("%s %.4f\n", t->first.c_str(), (double)(t->second)*100.0/cnt);
    }

    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章