字符串的展开

题目大意:

根据题目规则展开字符串。

正文:

模拟题,有些细节不能大意。

代码:


int main()
{
	scanf("%d%d%d", &p1, &p2, &p3);
	scanf("%s", str);
	for (int i = 0; i < strlen(str); i++)
	{
		if(str[i] != '-') 
		{
			ans[ansl++] = str[i];
			continue;
		}
		if(str[i - 1] == str[i + 1] - 1) continue;
		if(((str[i - 1] >= '0' && str[i - 1] <= '9') && str[i + 1] > '9') || (i == 0 || i == strlen(str) - 1) || (str[i - 1] == '-' || str[i + 1] == '-'))
		{
			ans[ansl++] = '-';
			continue;
		}
		if(str[i - 1] < str[i + 1])
		{
			for (char c = (p3==1?(str[i - 1] + 1):(str[i + 1] - 1)); (p3==1?(c < str[i + 1]):(c > str[i - 1])); (p3==1?c++:c--))
			{
				for (int j = 1; j <= p2; j++)
				{
					if(p1 == 1)
					{
						if(c >= 'A' && c <= 'Z') ans[ansl++] = c - ('A' - 'a');
						else ans[ansl++] = c;
					}else
						if(p1 == 2)
						{
							if(c >= 'a' && c <= 'z') ans[ansl++] = c + ('A' - 'a');
							else ans[ansl++] = c;
						}else
							if(p1 == 3)
								ans[ansl++] = '*';
				}
			}
		}else
		{
			ans[ansl++] = '-';
		}
	}
	for (int i = 0; i < ansl; i++) printf("%c", ans[i]);
	return 0;
}

原文地址:https://www.cnblogs.com/GJY-JURUO/p/13471044.html