1. 程式人生 > >【HDU - 2072 】單詞數(字串讀入技巧,sstream大法,水題,字串讀入格式)

【HDU - 2072 】單詞數(字串讀入技巧,sstream大法,水題,字串讀入格式)

題幹:

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

Input

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

Output

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

Sample Input

you are my friend
#

Sample Output

4

解題報告:

    恕我直言這題是真雞兒無聊,,你不用gets或者geline是死活AC不了的、、因為就算你再怎麼神奇的操作,考慮的再嚴密,,他樣例第一行萬一 上來一個空格 然後就回車了、、你咋整?本來應該輸出0的,,你就直接讀入了,因為你不可能程式一開始就先讀一個ch然後判讀如果不是空格的話再存入字串中啊!!那豈不是太麻煩了。,,,為了這個題沒必要,於是直接上istringstream就好了。。。

AC程式碼:

#include<iostream>
#include<cstdio>
#include<sstream>
#include<set>
using namespace std;
int main()
{
    string s;
    while(getline(cin, s) && s != "#") {
        istringstream in(s);
        set<string> ss;
        string w;
        while(in>>w)
            ss.insert(w);
        cout << ss.size() << endl;
    }
    return 0;
}

WA程式碼:

#include<set>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#define ll long long
using namespace std;
string s;
set<string> ss;
int main()
{
	char ch;
	while() {
		 
		if(s[0] == '#') break;
		ss.clear();
		ss.insert(s);
		ch=getchar();
		if(ch != '\n') {
			while(cin>>s) {
				ch=getchar();
				if(s[0] == '#') break;
				ss.insert(s);
				if(ch=='\n') break;
			}	
		}
		printf("%d\n",ss.size());
	}
	return 0;
}