天天看點

C++primer第五版 練習5.14

統計連續出現的單詞及其出現的最大次數

這道練習使可以參考本書第一章那個 例題的

但統計最大次數,出現最多的單詞。

就需要自己去補充啦

建立整型變量cnt用來計數,temp表示臨時值,max存放最大值

還用了exit(0)來實作函數直接終止。。

失誤啊,閱讀别的答主的答案之前未考慮到輸入的字元串中有重複次數一樣的

終闆程式已修正上述問題

終版程式

#include<iostream>
#include<vector>
#include<string>
#include<cstdlib>
using namespace std;
int main()
{
    string i_before,i_after;
    vector<string> v();    //設定為1000 容納重複的單詞      
    int max=,cnt2=,cnt=,k=;  //這組數設定的很巧妙 ,結合if語句閱讀          
    if(cin>>i_before)
    {    
         while(cin>>i_after)       
       {                               
            if(i_after==i_before)
                ++cnt; 
            else                     
            { 
              i_before=i_after;
              cnt=;
            }
                                       //基礎的輸入子產品


            if(cnt>=max)                //判斷子產品   
            {                         
                 if(cnt>max)            //一旦發現目前重複的單詞次數超過之前的次數最大值,
                {  int k=;            // 立馬重新擦寫vector 
                   cnt2=max=cnt;                             
                   v[k]=i_after;
                   for(int j=k+;j!=v.size();++j)  
                           v[j]="";
                }   
                else
                {
                    if(cnt2==max)       //確定個個都不同的單詞不會被寫入,同時次數相同的一定寫入
                   {    
                      v[++k]=i_after;    
                   }
                }
           }   
        }                           
            if(max==)                     //每個都不同,就是最大值一直都是一
            {
            cout<<"任何單詞都沒有連續出現過"<<endl;
            exit();                              
            } 
           for(auto it=v.begin();it!=v.end();++it) 
           {
              if(*it!="")                 //輸出vector元素
                 cout<<"單詞 "<<*it<<" 連續出現了 "<<cnt2<<" 次 "<<endl;
           }
    }
    return ;
} 
           

原始程式 存在上述問題

字元串i為第一次輸入後作為每次與新輸入比較的對象

字元串j用作每次新輸入

t用來存最大的單詞。

#include<iostream>
#include<vector>
#include<string>
#include<cstdlib>
using namespace std;
int main()
{
    string i,j,t;
    int cnt=,max=,temp=;
    if(cin>>i)
    {
      while(cin>>j)
      {
        if(i==j)
        {
          ++cnt;
        }
        else
        {
          i=j;
         cnt=;
        }
        temp=cnt;
        if(temp>max)
        {
           max=temp;
           t=j;
        }
      } 
       if(max==)
        {
         cout<<"任何單詞都沒有連續出現過"<<endl;
         exit();   
        } 
      cout<<"單詞 "<<t<<" 連續出現了 "<<max<<" 次 "<<endl;
    }
    return ;
} 
           

繼續閱讀