程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu 2072 找單詞 很不錯的一道題 模擬 and STL 2種做法

hdu 2072 找單詞 很不錯的一道題 模擬 and STL 2種做法

編輯:C++入門知識

單詞數
Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 16105    Accepted Submission(s): 4187


Problem Description
lily的好朋友xiaoou333最近很空,他想了一件沒有什麼意義的事情,就是統計一篇文章裡不同單詞的總數。下面你的任務是幫助xiaoou333解決這個問題。
 

Input
有多組數據,每組一行,每組就是一篇小文章。每篇小文章都是由小寫字母和空格組成,沒有標點符號,遇到#時表示輸入結束。
 

Output
每組只輸出一個整數,其單獨成行,該整數代表一篇文章裡不同單詞的總數。
 

Sample Input
you are my friend
#
 

Sample Output
4
 

Author
Lily
 

Source
浙江工業大學網絡選拔賽
 

Recommend
linle
 
思路:
這裡卡人的數 據有    2個單詞中間有多個空格   結尾也有空格
我白白錯了4次 所以這種題 寧可麻煩也要把所有的情況考慮到
 
[cpp]
#include<stdio.h> 
#include<map> 
#include<string> 
#include<string.h> 
using namespace std; 
char s[100000]; 
int main() 

    int d,cnt,flag=0; 
    char ch; 
    map<string,int>mp; 
    while(1)//一開始編其它題目的時候發現把ch!='\n'放這裡就彈出錯誤窗口 
    { 
        while(1) 
        { 
         ch=getchar(); 
         if(ch=='#') {flag=1;break;} 
         cnt=0; 
         while(1)//不要把條件放在這裡哦 放在裡面 否則出錯 我不知道為什麼 糾結 
         { 
             if(ch!=' ') break; 
             ch=getchar(); 
         } 
         if(ch=='\n') 
         { 
            printf("%d\n",mp.size()); 
            mp.clear(); 
            continue; 
         } 
         s[cnt]=ch; 
        // while(ch=getchar()&&ch!=' ') 錯誤同上  所以 只要是ch=getchar 其它條件盡量放進{}內 
         while(ch=getchar()) 
         { 
              if(ch==' '||ch=='\n') break; 
              s[++cnt]=ch; 
         } 
         s[++cnt]='\0'; 
         string s1=s; 
         mp[s]=1;//有相同單詞的時候 mp數組方式添加 自動覆蓋前面相同單詞  
         if(ch=='\n') 
         { 
            printf("%d\n",mp.size()); 
            mp.clear(); 
         } 
        } 
        if(flag) break; 
    } 
    return 0; 

STL 很帥的做法
[html] 
#include <iostream> 
#include <map> 
#include <stdio.h> 
#include <string.h> 
#include<string> 
using namespace std; 
int main() 

    char ch[1000000]; 
    string str,l; 
    int m,i,a,len,q; 
    while(gets(ch)&&ch[0]!='#')  
    { 
        a=0;m=0;q=0;len=0; 
        map<string,int>mp; 
        map<string,int>::iterator p; 
        l=ch; 
        i=0; 
        while(ch[i]==' ') i++;  //可能有前導空格  這裡很坑爹 
        if(i==strlen(ch)) {printf("0\n");continue;}   
        for(i;i<strlen(ch)+1;i++) //這裡加1 是為了比如 asb sfd這種數據當處理sfd的時候能進入else下面的處理   
        { 
            if(ch[i]>='a'&&ch[i]<='z')  
            { 
                len++; 
                q=0; 
            } 
            else  
            { 
                if(q==0) 
                { 
                    a=i-len; 
                    str=l.substr(a,len); 
                //  cout<<str<<endl; 
                    mp[str]=1; 
                    len=0; 
                    q=1; 
                } 
            } 
        } 
        printf("%d\n",mp.size()); 
    } 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved