zoukankan      html  css  js  c++  java
  • POJ 1951

    把给定字符串翻译成目标字符串需要满足的条件是:

    1、开头不能有空格

    2、末尾不能有空格

    3、给定标点前不能有空格

    4、不能有A、E、I、O、U

    5、空格不能和空格相邻

    6、相同的字母只能出现1次

    给出一组测试数据('_'表示空格):

    input

    _I_AM_M._

    output

    M.

    这道题是水题,但是我忽视了一点导致错误。

    形如"_I_AM_M._"这个输入。

    我开始的方法是从头扫空格,遇到字母就停下,这样I前的空格很容易就去掉了,但是像此种情况,I和A都是要去掉的字母,而I和A之间又有空格,这样的结果就是输出的M前会多一个空格,PE。避免这种错误的方法很简单,只要得要ans数组以后再扫就可以了,而不是直接扫输入的数组。在这种要去掉很多字母的情况下,最后处理空格最稳妥。这题的错误一方面是因为我托大的心态,另一方面是经验不足,以后要吸取教训。

    #include <iostream>
    using namespace std ;
    int main()
    {
        char str[101],ans[101] ;
        int num[101] ;
        int top ;
        while(gets(str)) 
        {
            if(str[0]==EOF)
                break ;
            int len=strlen(str) ;
            top=0 ;
            int f=1 ;//判断多个空格不能相邻的标志 
            memset(num,0,sizeof(num)) ;
            for(int i=0;i<len;i++)
            {
                if(str[i]==' ' && f)
                {
                    ans[top++]=' ' ;
                    f=0 ;
                    continue ;
                }
                else if(str[i]==' ')
                    continue ;
                if(str[i]=='A' || str[i]=='E' || str[i]=='I' || str[i]=='O' || str[i]=='U')//跳过的字母 
                {
                    continue ;
                }
                if(str[i]=='.' || str[i]==',' || str[i]=='?')//打印标点
                {
                    ans[top++]=str[i] ;
                    f=1 ;
                    continue ;
                }
                if(num[str[i]]==0)//打印字母 
                {
                    ans[top++]=str[i] ;
                    num[str[i]]=1 ;
                    f=1 ;
                    continue ;
                } 
            }
            //printf("%d %s",top,ans) ;
            while(ans[top-1]==' ')//末尾不能是空格 
                top-- ;
            int cnt ;
            for(int i=0;i<top;i++)//输出前面不能有空格 
                if(ans[i]!=' ')
                {
                    cnt=i ;
                    break ;
                }
            for(int i=cnt;i<top;i++)
            {
                if(ans[i]==' ' && (ans[i+1]=='.' || ans[i+1]==',' || ans[i+1]=='?'))//去掉标点前的空格 
                    continue ;
                else
                    printf("%c",ans[i]) ;
            } 
            putchar('
    ') ; 
        }
        return 0 ;
    }
    View Code
  • 相关阅读:
    jenkins更换国内源
    jenkins修改初始密码
    jenkins常用插件
    jenkins安装
    ResNet几种变体,以及DenseNet解释
    预测某个位置使用全局特征和使用周围特征的区别
    SPP Net作用
    yolov3 size说明,shortcut残差
    F.pad说明 用于pad操作
    自己的yolov3模型创建全流程
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/3400292.html
Copyright © 2011-2022 走看看