hdu 2072 單詞數

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

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

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

Sample Input
you are my friend#
 

Sample Output
4
 

Author
Lily
 

Source

 

思路:現在字符串末尾添加一個空格,然後以空格爲分隔符,分成一個個的單詞存入數組中間,然後計算數組中間有多少是重複的,總單詞數量減去重複的數量就是答案。

注意:"a           aa            a              aa                 "這種字符串wa了一發。

代碼:

#include<stdio.h>
#include<string.h>
char a[1200],b[1200][1200];
int main()
{
    while(gets(a)&&strcmp(a,"#"))
    {
        int i,j,k=0,t=0,num=0,l=strlen(a);//最開始的時候所有l都是用strlen(a)表示,然後wa了一發
        a[l]=' ';
        memset(b,0,sizeof(b));
        for(i=0; i<l+1; i++)
        {
            if(a[i]==' '&&i>k)
            {
                while(a[k]==' ')
                    k++;
                if(k>=i)
                    continue ;
                for(j=k; j<i; j++)
                    b[t][j-k]=a[j];
                t++;
                k=i+1;
            }
        }
        for(i=1; i<t; i++)
        {
            for(j=0; j<i; j++)
            {
                if(strcmp(b[i],b[j])==0)//判重
                {
                    num++;
                    break;
                }
            }
        }
        printf("%d\n",t-num);
    }
    return 0;
}

還有一種c++的代碼簡單很多:

#include<iostream>
#include<sstream>
#include<set>
using namespace std;
int main()
{
    string s,w;
    while(getline(cin,s)&&s!="#")     //注意c++中string可以比較,所以s!="#"這裏是雙引號
    {
        set<string>word;              //set容器中不會有重複的元素,所以用set容器判重
        stringstream ss(s);           //將一串字符串轉化爲字符流(字符串中的空格將被視爲間隔符)
        while(ss>>w)                  //將字符流一個個傳遞給w
            word.insert(w);           //將w插入容器中
        cout<<word.size()<<endl;      //輸出容器的大小
    }
    return 0;
}

發佈了78 篇原創文章 · 獲贊 4 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章