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('\n') ; 

    }

    return 0 ;

}
View Code

 

 

你可能感兴趣的:(poj)