70分(5,7,9)求调!!!
查看原帖
70分(5,7,9)求调!!!
1148832
LabmemNo_012LzTopic楼主2024/7/23 11:48
#include<stdio.h>
#include<string.h>
#include<math.h>

int pd(char x, char y)//是否为同一类型
{
	if (x >= 'a' && x <= 'z')
	{
		if (y >= 'a' && y <= 'z')
		{
			return 1;
		}
		else return 0;
	}
	else
	{
		if (y >= '0' && y <= '9')
		{
			return 1;
		}
		else return 0;
	}
}

int main()
{
	int p1, p2, p3;
	char s[105];
	scanf("%d%d%d", &p1, &p2, &p3);
	getchar();
	scanf("%s", s);
	int len, k;
	len = strlen(s);
	for (int i = 0; i < len; i++)
	{
		if (s[i] == '-')
		{
			if (pd(s[i - 1], s[i + 1]));//是否为同一类型
			else
			{
				printf("-");//不是就保留’-’
				continue;
			}
			k = s[i + 1] - s[i - 1];
			if (k == 1)continue;//减号右边的字符恰好是左边字符的后继,只删除中间的减号
			if (k < 1)//减号右边的字符严格大于左边的字符(不满足)
			{
				printf("-");
				continue;
			}
			else//减号右边的字符严格大于左边的字符
			{
				if (p3 == 1)//顺序
				{
					for (int j = 1; j < k; j++)
					{
						for (int z = 1; z <= p2; z++)//一个字符打印几次
						{
							if (s[i - 1] >= 'a' && s[i - 1] <= 'z')//字母
							{
								if (p1 == 3)printf("*");
								else if (p1 == 1)//打印小写字母
								{
									printf("%c", s[i - 1] + j);
								}
								else//打印大写字母
								{
									printf("%c", s[i - 1] + j - 32);
								}
							}
							else//数字
							{
								printf("%c", s[i - 1] + j);
							}
						}
					}
				}
				else//逆序
				{
					for (int j = 1; j < k; j++)
					{
						for (int z = 1; z <= p2; z++)
						{
							if (s[i - 1] >= 'a' && s[i - 1] <= 'z')
							{
								if (p1 == 3)printf("*");
								else if (p1 == 1)
								{
									printf("%c", s[i + 1] - j);
								}
								else
								{
									printf("%c", s[i + 1] - j - 32);
								}
							}
							else
							{
								printf("%c", s[i + 1] - j);
							}
						}
					}
				}
			}
		}
		else
		{
			printf("%c", s[i]);
		}
	}
	return 0;
}
2024/7/23 11:48
加载中...