本题所采用的思想并不复杂,只是情况较多,尤其是注意字符串的开始和结尾都是'-'
的情况
#include <iostream>
using namespace std;
#include <ctype.h>
void Print_Char(char left, char right, int p1, int p2, int p3)
{
//如果减号右边的字符恰好是左边字符的后继,只删除中间的减号
if(right-left == 1) printf("");
else if(right <= left) printf("-");
else
{
char temp;
//正序输出
if(1 == p3)
{
for(temp = left+1; temp < right; temp++)
{
for(int i = 0; i < p2; i++)
{
if(1 == p1) printf("%c", tolower(temp));
else if(2 == p1) printf("%c", toupper(temp));
else if(3 == p1) printf("*");
}
}
}
else if(2 == p3) //逆序输出
{
for(temp = right-1; temp > left; temp--)
{
for(int i = 0; i < p2; i++)
{
if(1 == p1) printf("%c", tolower(temp));
else if(2 == p1) printf("%c", toupper(temp));
else if(3 == p1) printf("*");
}
}
}
}
}
int main(void)
{
char str[105];
int p1, p2, p3;
scanf("%d%d%d", &p1, &p2, &p3);
scanf("%s", str);
int i, j;
//排除开头都是-的情况
for(j = 0; str[j] != '\0'; j++)
{
if(str[j] == '-') printf("-");
else break;
}
//遍历字符串
for(i = j; str[i] != '\0'; i++)
{
if(str[i] != '-')
printf("%c", str[i]);
else if(str[i] == '-' && str[i+1] == '\0') //如果最后一项是-,则输出-
printf("-");
else if(abs(str[i+1]-str[i-1]) > 26)
printf("-");
else
Print_Char(str[i-1], str[i+1], p1, p2, p3);
}
return 0;
}