下厨房

题目描述:
牛牛想尝试一些新的料理,每个料理需要一些不同的材料,问完成所有的料理需要准备多少种不同的材料。

输入描述:

  • 每个输入包含 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值