您的位置:首页 > 其它

poj 1002 电话号码\字符串处理

2015-06-17 19:47 246 查看
...读题一定要仔细啊最后说如果电话中没有重复的号码需要输出No duplicates.

还有就是看discuss板块是有好处的

看了一些博客都说要变成数组,但是直接转换成string串我感觉更好想

注意就是怎么转换, 输入用char 字符数组, 然后和string转换时候用强制转换(string)q,这里假设q是char字符数组

Q和Z不传给串里就好了,忽略,

#include<cstdio>

#include<cstring>

#include<string>

#include<iostream>

#include<algorithm>

using namespace std;

    char a[100005][20];//a是原始输入用的每个字符串

    char s[20];//s是一个临时存放处理时的串,然后转换成string类存到q里

    string q[100005];//q是准备处理之后都是数字之后的串

bool cmp(string x, string y)

{

    return x < y;

}

int main()

{

    int n, m, i, j, k;

    int t, tt, con;

    while(~scanf("%d", &n))

    {

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

        {

            scanf("%s", a[i]);

            t = strlen(a[i]);

            con = 0;

            for(j = 0, k = 0; j < t; ++j)

            {

                if(a[i][j] =='-')continue;

                if(a[i][j]>='A'&&a[i][j]<='Y'&&a[i][j]!='Q')

                {

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

                    {

                        s[k++] = '2';

                    }

                    else if(a[i][j]>='D' &&a[i][j]<='F')

                    {

                        s[k++] = '3';

                    }

                    else if(a[i][j]>='G' &&a[i][j]<='I')

                    {

                        s[k++] = '4';

                    }

                    else if(a[i][j]>='J' &&a[i][j]<='L')

   
4000
                {

                        s[k++] = '5';

                    }

                    else if(a[i][j]>='M' &&a[i][j]<='O')

                    {

                        s[k++] = '6';

                    }

                    else if(a[i][j]>='P' &&a[i][j]<='S')

                    {

                        s[k++] = '7';

                    }

                    else if(a[i][j]>='T' &&a[i][j]<='V')

                    {

                        s[k++] = '8';

                    }

                    else if(a[i][j]>='W' &&a[i][j]<='Y')

                    {

                        s[k++] = '9';

                    }

                }

                else if(a[i][j]!='Q'&&a[i][j]!='Z')

                {

                    s[k++] = a[i][j];

                }

            }

            s[k] ='\0';

            q[i] = (string)s; //这里强制转换成string类,不知道string串的最后一个字符是不是'\0', 我加了输出不正确就是了.

            //puts(s);

        }

        sort(q, q+n, cmp);

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

//        {

//            cout << "---" << q[i] << endl;

//        }

        tt = 1;

        int con = 0;

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

        {

            if(q[i]==q[i-1])

            {

                tt++;

            }

            else

            {

                if(tt>1)

                {

                    for(k = 0; k < q[i-1].size(); ++k)

                    {

                        if(k == 3)printf("-");

                        cout << q[i-1][k];

                    }

                    printf(" %d\n", tt);

                    con = 1;

                    tt = 1;

                }

            }

        }

        if(con == 0)printf("No duplicates.\n");

    }

    return 0;

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