例题5-4 反片语 UVa156

算法竞赛入门经典(第2版) 第5C++与STL入门

题5-4反片语  UVa156

感悟。

1、从网站下载英文原题,重点在看输入输出数据与格式。

2、结合书中中文,英文原题能很快读懂。

3、在搭建输入输出框架中,对string进一步熟悉,该英文原题PDF文件中无法复制输入数据,网上找了一通,保留如下:

ladder came tape soon leader acme RIDE lone Dreis peat
 ScAlE orb  eye  Rides dealer  NotE derail LaCeS  drIed
noel dire Disk mace Rob dries
#

4、找了http://www.cnblogs.com/anywei/archive/2011/10/27/2226830.html介绍map比较详细的博客进行学习。

5、查着资料,硬着头皮用map写了一遍,竟然样例通过,太方便了,几乎不要做什么事,map中已自动做好,上http://vjudge.net提交AC,上https://uva.onlinejudge.org/继续提交AC,看看时间2016-11-16

6、开始看书中的解答,费了点劲,看懂了,感觉本人代码写得还不错,没有绕来绕去。

7、书中需要新学习的函数,map count

8、附上AC代码,编译环境Dev-C++4.9.9.2

#include <cstdio>
#include <iostream>
#include <map>
#include <string>

using namespace std;

int main(){
    string str;
    int slen;
    string stmp;
    int i,j;
    char ctmp;
    map<string,string> strmap;
    map<string,string>::iterator it,itj;
    int flag;
    while(cin>>str){
        if(str=="#")
            break;
        slen=str.length();
        stmp=str;//字符串复制(拷贝)
        
        for(i=0;i<slen;i++){//字符串转小写
            if(stmp[i]>='A'&&stmp[i]<='Z')
                stmp[i]='a'+stmp[i]-'A';
        }
        
        for(i=0;i<slen;i++){//冒泡排序,自小到大
            for(j=i+1;j<slen;j++){
                if(stmp[i]>stmp[j]){
                    ctmp=stmp[i];
                    stmp[i]=stmp[j];
                    stmp[j]=ctmp;
                }
            }
        }
        
        strmap[str]=stmp;
        //cout<<str<<" "<<stmp<<endl;
    }
    
    //遍历map
    for(it=strmap.begin();it!=strmap.end();it++){
        flag=0;
        for(itj=strmap.begin();itj!=strmap.end();itj++){
            if(it->first!=itj->first&&it->second==itj->second){
                flag=1;
            }
        }
        if(flag==0){
            cout<<it->first<<endl;
        }
    }
    return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值