您的位置:首页 > 其它

poj 1002

2013-01-22 10:15 134 查看
寒假第一道OJ   qsort对字符串排序的简单应用 昨晚WA了一晚上,没考虑到的情况,如果最后一个字符串和前一个字符串相同时,没有输出最后一个字符串

原码如下:

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

int Change (char *s1,char *s2,int n)

{

    int i,j;

    for (i=j=0; i<n; i++)

         if(s1[i]!='-')

         {

                 if (s1[i]<='9'&&s1[i]>='0')

                 s2[j++]=s1[i];

                 if (s1[i]<='C'&&s1[i]>='A')

                 s2[j++]='2';

                 if (s1[i]<='F'&&s1[i]>='D')

                 s2[j++]='3';

                 if (s1[i]<='I'&&s1[i]>='G')

                 s2[j++]='4';

                 if (s1[i]<='L'&&s1[i]>='J')

                 s2[j++]='5';

                 if (s1[i]<='O'&&s1[i]>='M')

                 s2[j++]='6';

                 if (s1[i]=='P'||s1[i]=='R'||s1[i]=='S')

                 s2[j++]='7';

                 if (s1[i]<='V'&&s1[i]>='T')

                 s2[j++]='8';

                 if (s1[i]<='Y'&&s1[i]>='W')

                 s2[j++]='9';    

         }   

    s2[j]='\0';

    return 0;

}

int compare(const void *a,const void *b)

{

        char *p1=(char *)a;

        char *p2=(char *)b;

        return strcmp(p1, p2);

}

int main()

{

    int n,i,j,flag;

    int num[100000]={0};

    char ss[50],s[100000][8]={0};

    scanf("%d",&n);getchar();

    for ( i=0; i<n; i++ )

    {

         gets(ss);

         Change(ss,s[i],strlen(ss) );

    }

    qsort(s,n,sizeof(s[0]),compare );

    for ( flag=i=0;i<n;i++)

    {

        num[i]=1;

    }

    for ( i=1; i<n; i++)

    {

         if (!strcmp(s[i-1],s[i]))

         num[i]+=num[i-1];

         else if (num[i-1]>1)

         {   

              flag=1;

              for ( j=0; j<7; j++)

              {   

                   printf ("%c",s[i-1][j]);

                   if (j==2)printf ("-");  

              }

              printf (" %d\n",num[i-1]);

         }

    }

    if(num[i-1]>1)

    {   

              flag=1;

              for ( j=0; j<7; j++)

              {   

                   printf ("%c",s[i-1][j]);

                   if (j==2)printf ("-");  

              }

              printf (" %d\n",num[i-1]);

    }

    if(!flag)   printf ("No duplicates.\n");

   

    return 0;

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: