UVa156 map set vector/STL


#include <bits/stdc++.h>

using namespace std;
string tranfer(string data)
{
    string data_copy;
    data_copy=data;//可以直接复制,也可以直接赋值string a=b;
    for(int i=0;i<data.length();i++){
        //if(isalpha(data[i])==1) 不能加这个判断,因为题目中说可能有数字,那么条件为假,这个数不被赋值给data_copy,后面的程序会出错,假设题目中没有说有数字,为了程序的鲁棒性在题目没有特殊要求的情况下也不应该加一个判断
           data_copy[i]=tolower(data[i]);//tolower对非字符和小写字母不做处理
    }
    sort(data_copy.begin(),data_copy.end());//对于一串string的内部排序,1可以用sort,2用begin(),end(),表示起始位置、
    return data_copy;
}
int main()
{
    map<string,int> data_map;
    vector<string> data_vector,data_vector2;//vector仅仅利用它不定长存储的特点,来看存了多少
    set<string> data_set;//由于红黑树节点存储的原因,往里插入数据时会由小到大按ASCⅡ码排序
    string data;

    while(cin>>data){//scanf("%s",data)&&data!="#",用scanf读入string需要预先分配空间,string a;a.resize(100);scanf("%s",&a[0]);
        if(data=="#")
            break;
        string data_copy=tranfer(data);
        if(data_map.count(data_copy)==0) data_map[data_copy]=0;//这句加不加都可以(选手们思维方式不同),因为只要映射进map一次,其映射的值默认就是0。只有下面一句话既可,既将未加入map的数据加入map,又使已经出现过的数据的映射值加1。
           data_map[data_copy]++;
        data_vector.push_back(data);
    }
    //下面,装入set里自动排序,或者push_back装入一个新的vector,然后sort
    //  1)
    for(int i=0;i<data_vector.size();i++){
        if(data_map[tranfer(data_vector[i])]==1)
            data_vector2.push_back(data_vector[i]);
    }
    sort(data_vector2.begin(),data_vector2.end());
    for(int i=0;i<data_vector2.size();i++){
        cout<<data_vector2[i]<<endl;
    }
    /*  2)
        for(int i=0;i<data_vector.size();i++){
            if(data_map[tranfer(data_vector[i])]==1)
                data_set.insert(data_vector[i]);
        }
        for(set<string>::iterator it=data_set.begin();it!=data_set.end();++it){
            cout<<*it<<endl;
        }
    */
        return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值