天天看點

破譯郵件

題目描述

小明收到了一封很奇怪的郵件,裡面全是一些符号和數字,但是信上面給出了破譯方法,具體方法如下:

(1)将1變為‘A’,2變為‘B’,...,26變為‘Z’;

(2)将‘#’變為一個空格;

(3)忽略‘-’,原始信件中‘-’僅僅用來分割數字。

現請你程式設計幫助小明破譯這封郵件。

輸入

輸入的第一行為一個整數C,表示測試資料的組數。

接下來C行,每行輸入一個待破譯的字元串,字元串中隻包含數字、‘-’和‘#’,長度不超過100。

輸出

對于每組輸入,輸出破譯後的文本。

樣例輸入

4
9#23-9-12-12#19-20-5-1-12#1-20#12-5-1-19-20#15-14-5#10-5-23-5-12
1-14-4#12-5-1-22-5#20-8-5#13-21-19-5-21-13#9-14#20#13-9-14-21-20-5-19
1-6-20-5-18#20-8-5#15-16-5-14-9-14-7#15-6#20-8-5#5-24-8-9-2-9-20-9-15-14
7-15-15-4#12-21-3-11      

樣例輸出

I WILL STEAL AT LEAST ONE JEWEL
AND LEAVE THE MUSEUM IN T MINUTES
AFTER THE OPENING OF THE EXHIBITION
GOOD LUCK      

提示

題目不難,重要的是縷清思路

1.三種情況(數字(數字,'-', '#')   '-'     '#')

注意陷阱(1個)

結尾應該如何處理,

/*
 (1)将1變為‘A’,2變為‘B’,...,26變為‘Z’;
 (2)将‘#’變為一個空格;
 (3)忽略‘-’,原始信件中‘-’僅僅用來分割數字。
   9#23-9-12-12#19-20-5-1-12#1-20#12-5-1-19-20#15-14-5#10-5-23-5-1
*/
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int m;
	char s[101];
	char a[101];
	cin>>m;
	getchar();
	while(m--)
	{
		scanf("%s",s);
		int k=0;
		int sum=0;
		for(int i=0;i<strlen(s);i++)     //分為3中大情況,
		{
			if(s[i]>='0'&&s[i]<='9')     //數字的話,裡面再細分三種情況
			{
				sum=sum*10+s[i]-'0';
			//	printf("%d\n",sum);
				if(s[i+1]>='0'&&s[i+1]<='9')
				{
					sum=sum*10+s[i+1]-'0';
					a[k++]=sum-1+'A';
					//printf("%d***\n",sum-1);
					i++;
					sum=0;
				}
				else if(s[i+1]=='-'||s[i+1]=='\0')  //此陷阱,末尾需要處理
				{
					a[k++]=sum-1+'A';
					//printf("%c***\n",sum-1+'A');
					sum=0;
				}
				else if(s[i+1]=='#')
				{
					a[k++]=sum-1+'A';
					sum=0;
				}
			}
			else if(s[i]=='-')
			{
				continue;
			}
			else if(s[i]=='#')
			{
				a[k++]=' ';
			}
	
		}
		//printf("K:%d %c\n",k,a[0]);
		for(int i=0;i<k;i++)
		printf("%c",a[i]);
		printf("\n");

	}
}