EOJ-大学生程序设计邀请赛(华东师范大学)-A-拼音魔法

ACM模版

描述

描述

题解

字符串模拟题,不难,就是坑……一定要细心、一定要细心、一定要细心……重要的事说三遍。

另外,尼玛啊,我拼音都忘完了,平时敲键盘只是想着怎么拼,但是很久没有想过怎么加声调了,结果,坑死了,无限 WA 啊!

代码

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int MAXN = 10;

char s[MAXN];

int main()
{
    int n;
    cin >> n;

    int cs = 1;
    while (n--)
    {
        scanf("%s", s);
        printf("Case %d: ", cs++);
        int len = (int)strlen(s);
        int flag = 0;
        if (s[len - 1] >= '1' && s[len - 1] <= '4')
        {
            flag = s[len - 1] - '0';
            len--;
        }
        int a = 0, e = 0, i = 0, o = 0, u = 0, v = 0;
        for (int j = 0; j < len; j++)
        {
            if (s[j] == 'a')
            {
                a++;
            }
            else if (s[j] == 'e')
            {
                e++;
            }
            else if (s[j] == 'i')
            {
                i++;
            }
            else if (s[j] == 'o')
            {
                o++;
            }
            else if (s[j] == 'u')
            {
                u++;
            }
            else if (s[j] == 'v')
            {
                v++;
                if (s[j + 1] == 'e' || s[j + 1] == 'n')
                {
                    s[j] = 'u';
                    u++;
                    v--;
                }
            }
        }
        for (int j = 0; j < len; j++)
        {
            if (s[j] == 'a')
            {
                switch (flag)
                {
                    case 0:
                        cout << "a";
                        break;
                    case 1:
                        cout << "ā";
                        break;
                    case 2:
                        cout << "á";
                        break;
                    case 3:
                        cout << "ǎ";
                        break;
                    case 4:
                        cout << "à";
                        break;
                }
                flag = 0;
                a--;
            }
            else if (a == 0 && s[j] == 'o')
            {
                switch (flag)
                {
                    case 0:
                        cout << "o";
                        break;
                    case 1:
                        cout << "ō";
                        break;
                    case 2:
                        cout << "ó";
                        break;
                    case 3:
                        cout << "ǒ";
                        break;
                    case 4:
                        cout << "ò";
                        break;
                }
                flag = 0;
                o--;
            }
            else if (a == 0 && s[j] == 'e')
            {
                switch (flag)
                {
                    case 0:
                        cout << "e";
                        break;
                    case 1:
                        cout << "ē";
                        break;
                    case 2:
                        cout << "é";
                        break;
                    case 3:
                        cout << "ě";
                        break;
                    case 4:
                        cout << "è";
                        break;
                }
                flag = 0;
                e--;
            }
            else if (a == 0 && o == 0 && e == 0 && s[j] == 'i')
            {
                if (s[j + 1] == 'u')
                {
                    cout << "i";
                    i--;
                    continue;
                }
                switch (flag)
                {
                    case 0:
                        cout << "i";
                        break;
                    case 1:
                        cout << "ī";
                        break;
                    case 2:
                        cout << "í";
                        break;
                    case 3:
                        cout << "ǐ";
                        break;
                    case 4:
                        cout << "ì";
                        break;
                }
                flag = 0;
                i--;
            }
            else if (a == 0 && o == 0 && e == 0 && s[j] == 'u')
            {
                if (s[j + 1] == 'i')
                {
                    cout << "u";
                    u--;
                    continue;
                }
                switch (flag)
                {
                    case 0:
                        cout << "u";
                        break;
                    case 1:
                        cout << "ū";
                        break;
                    case 2:
                        cout << "ú";
                        break;
                    case 3:
                        cout << "ǔ";
                        break;
                    case 4:
                        cout << "ù";
                        break;
                }
                flag = 0;
                u--;
            }
            else if (a == 0 && o == 0 && e == 0 && i == 0 && u == 0 && s[j] == 'v')
            {
                switch (flag)
                {
                    case 0:
                        cout << "ü";
                        break;
                    case 1:
                        cout << "ǖ";
                        break;
                    case 2:
                        cout << "ǘ";
                        break;
                    case 3:
                        cout << "ǚ";
                        break;
                    case 4:
                        cout << "ǜ";
                        break;
                }
                flag = 0;
                v--;
            }
            else
            {
                if (s[j] == 'v')
                {
                    cout << "ü";
                    v--;
                }
                else if (s[j] == 'a')
                {
                    cout << "a";
                    a--;
                }
                else if (s[j] == 'e')
                {
                    cout << "e";
                    e--;
                }
                else if (s[j] == 'i')
                {
                    cout << "i";
                    i--;
                }
                else if (s[j] == 'o')
                {
                    cout << "o";
                    o--;
                }
                else if (s[j] == 'u')
                {
                    cout << "u";
                    u--;
                }
                else
                {
                    cout << s[j];
                }
            }
        }

        cout << '\n';
    }

    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值