典型的模拟的题目

思路:题目要求怎么做我们就怎么做

易错点: 1.在遍历字符串时,无论是4-s还是s-4都是按原来的输入的进行输出(题目要求的)

2.头-尾,每次输出完头之后,不用输出尾,然后i+=1,然后for就循环出i又+=1了,然后新的一次for循环来处理上一个没输出的尾,不然会导致尾重复输出,或者c-e-d输出ce-d的情况!

下面是我的代码(菜鸟写的代码,大佬勿喷)

#include<bits/stdc++.h>
using namespace std;

int main()
{
    int p1, p2, p3;
    string s;
    string ans;
    cin >> p1 >> p2 >> p3;
    cin >> s;
    int size = s.size();
    if (p3 == 1)
    {
        //-两侧输入的同为小写字母或数字
        for (int i = 0; i < size; i++)
        {
            if ((i + 1 < size) && (i + 2 < size) && (s[i + 1] == '-') && (s[i + 2] - s[i] > 0)&&((s[i+2]>='0'&&s[i+2]<='9'&&s[i]>='0'&&s[i]<='9')|| 
(s[i + 2] >= 'a' && s[i + 2] <= 'z' && s[i] >= 'a' && s[i] <= 'z')))
            {
                if (s[i + 2] - s[i] == 1)
                {
                    cout << s[i];
                    i += 1;
                }
                else
                {
                    int distance = s[i + 2] - s[i];//看两个数差多远
                    cout << s[i];
                    for (int j = 1; j < distance; j++)
                    {
                        int tmp = p2;
                        switch (p1)
                        {
                        case 1:
                        {
                            while (tmp > 0)
                            {
                                cout << char(s[i] + j);
                                tmp--;
                            }
                            break;
                        }
                        case 2:
                        {
                            if (s[i] >= 'a' && s[i] <= 'z')//说明是字符,大写字母
                            {
                                while (tmp > 0)
                                {
                                    cout << char(s[i] + j - 32);
                                    tmp--;
                                }
                            }
                            else
                            {
                                while (tmp > 0)
                                {
                                    cout << char(s[i] + j);
                                    tmp--;
                                }
                            }
                            break;
                        }
                        case 3:
                        {
                            while (tmp > 0)
                            {
                                cout << '*';
                                tmp--;
                            }
                        }
                        }
                    }
                    
                    i += 1;
                }
            }
            else
            {
               
                cout << s[i];

            }

        }
    }
    else if (p3 == 2)
    {
        //-两侧输入的同为小写字母或数字
        for (int i = 0; i < size; i++)
        {
            if ((i + 1 < size) && (i + 2 < size) && (s[i + 1] == '-') && (s[i + 2] - s[i] > 0) && ((s[i + 2] >= '0' && s[i + 2] <= '9' && s[i] >= '0' && s[i] <= '9') ||
            (s[i + 2] >= 'a' && s[i + 2] <= 'z' && s[i] >= 'a' && s[i] <= 'z')))
            {
                if (s[i + 2] - s[i] == 1)
                {
                    cout << s[i];
                    i += 1;
                }
                else
                {
                    int distance = s[i + 2] - s[i];//看两个数差多远
                    cout << s[i];
                    for (int j = distance-1; j >0; j--)
                    {
                        int tmp = p2;
                        switch (p1)
                        {
                        case 1:
                        {
                            while (tmp > 0)
                            {
                                cout << char(s[i] + j);
                                tmp--;
                            }
                            break;
                        }
                        case 2:
                        {
                            if (s[i] >= 'a' && s[i] <= 'z')//说明是字符,大写字母
                            {
                                while (tmp > 0)
                                {
                                    cout << char(s[i] + j - 32);
                                    tmp--;
                                }
                            }
                            else
                            {
                                while (tmp > 0)
                                {
                                    cout << char(s[i] + j);
                                    tmp--;
                                }
                            }
                            break;
                        }
                        case 3:
                        {
                            while (tmp > 0)
                            {
                                cout << '*';
                                tmp--;
                            }
                        }
                        }
                    }

                    i += 1;
                }
            }
            else
                cout << s[i];

        }
    }
    return 0;
}