CS106B-Section Handout #2(4)

Problem 4: Map Warm-up
Write a function:

char MostFrequentCharacter(ifstream &if, int &numOccurrences);

that given an input file stream, returns the character that occurs the most frequently and stores the number of times it occurs in the reference parameter numOccurrences.  To write this function, first start by scanning through the file stream, analyzing each character and storing an updated count in a map.  Then, after you’ve built this table, iterate over it to find the character that occurred the most often.

(就是数文档中出现最多的数字,这是使用标准库来写的XD= ,=

上午的时候莫名奇妙的老是出错,恼火之下耐着性子去看了C++ primer的iterator章节,没觉得有啥新进展,但是修改了一下,就TMMD成功了,所以也不知道之前到底出了什么问题……垂泪!

值得一提的是接触的iterator的方法,不过还是理解不深,话说map.end()应该就是指结束把,按理说没有指向最后一个吧?

++itr 向后面一个

--itr 向前一个

for(iterator = map.begin(); iterator != map.end();++itr)

#include   <iostream>   
#include   <fstream>   
#include   <map>   
#include   <string>  
using   namespace   std;   
  
  
char MostFrequentCharacter(ifstream &in, int &numOccurrences){  
    map<char,int> myMap;  
    char ch;  
    while(true){  
        ch = in.get();//文档中的每个char  
  
        if(myMap.find(ch) != myMap.end()){  
            int cout = myMap[ch];  
            myMap[ch] = cout + 1;  
        }else{  
            myMap.insert(pair<char, int>(ch, 1));  
        }  
        if(in.eof()) break;  
    }  
      
    map<char,int> :: iterator itr;  
  
    int frequuency = 0;//其实就是出现的次数= ,=  
    char maxChar;  
    /*for 是根据itr来循环*/  
    for(itr= myMap.begin(); itr != myMap.end() ; ++itr){  
        frequuency =  itr->second;  
        if(frequuency > numOccurrences   
            &&(('a' <= itr->first && itr->first<= 'z') || ('A' <= itr->first && itr->first<= 'Z')  ) ) {  
                //用来保证计算的一定是字母,如果只是想抛弃空格和回车的话,可以把后面这个改成&& itr -> first != '\ ' && itr -> first != '\n'  
            maxChar = itr -> first;  
            numOccurrences = myMap[maxChar];  
        }         
    }  
  
    return maxChar;  
}  
  
  
int main(){  
    ifstream in;  
    string fileName = "name.txt";  
    in.open(fileName);  
  
    int numOccurrences = 0;   
    char a = MostFrequentCharacter(in, numOccurrences);  
    cout<<a <<" " << numOccurrences ;  
    return 0;  
}


你可能感兴趣的:(CS106B-Section Handout #2(4))