题目描述:
牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。
输入描述:
- 每个输入包含 1 个测试用例。每个测试用例的第 i 行,表示完成第 i
件料理需要哪些材料,各个材料用空格隔开,输入只包含大写英文字母和空格,输入文件不超过 50 行,每一行不超过 50 个字符。
输出描述:
- 输出一行一个数字表示完成所有料理需要多少种不同的材料。
样例:
输入
BUTTER FLOUR
HONEY FLOUR EGG
输出
4
思路讲解:这个就是简单的去除重复元素的问题获得元素个数的问题,这个问题主要就是存在两个问题一个是如何不知道多少行的前提下读取字符串,第二个就是如何将字符串按照空格分割开来。解决了这两个问题就好了,第一个问题我用的是while(cin>>)方法,第二个问题我是使用stringstream来进行字符串的分割。下面就利用set函数对单词的个数进行统计了。
代码详解:
#include<iostream>
#include<set>
#include<cstring>
#include<sstream>
#include<vector>
using namespace std;
int main(){
set<string> map;
string str;
string result;
vector<string>res;
while(cin>>str){//读取字符串
stringstream input(str);
while(input>>result){//对每一个字符串进行分割
res.push_back(result);
}
}
/*cout<<res.size()<<endl;
for(int i=0;i<res.size();i++){
cout<<res[i]<<" ";
}
cout<<endl;*/
for(int i=0;i<res.size();i++){//去除重复字符串
if(map.size()==0){
map.insert(res[i]);
}else{
if(map.find(res[i])==map.end()){
map.insert(res[i]);
}
}
}
cout<<map.size()<<endl;
return 0;
}