UVA---458解码器

题目描述:

Write a complete program that will correctly decode a set of characters into a valid message. Your program should read a given file of a simple coded set of characters and print the  exact message that the characters contain. The code key for this  simple coding is a one for one character substitution based upon asingle arithmetic manipulation of the printable portion of the  ASCII character set.

 

Input and Output

 

For example: with the input file that contains:

1JKJ'pz'{ol'{yhklthyr'vm'{ol'Jvu{yvs'Kh{h'Jvywvyh{pvu5
1PIT'pz'h'{yhklthyr'vm'{ol'Pu{lyuh{pvuhs'I|zpulzz'Thjopul'Jvywvyh{pvu5
1KLJ'pz'{ol'{yhklthyr'vm'{ol'Kpnp{hs'Lx|pwtlu{'Jvywvyh{pvu5

your program should print the message:

*CDC is the trademark of the Control Data Corporation.
*IBM is a trademark of the International Business Machine Corporation.
*DEC is the trademark of the Digital Equipment Corporation.

Your program should accept all sets of characters that use the same encoding scheme and should print the actual message of each set of characters.

 

Input

1JKJ'pz'{ol'{yhklthyr'vm'{ol'Jvu{yvs'Kh{h'Jvywvyh{pvu5

1PIT'pz'h'{yhklthyr'vm'{ol'Pu{lyuh{pvuhs'I|zpulzz'Thjopul'Jvywvyh{pvu5

1KLJ'pz'{ol'{yhklthyr'vm'{ol'Kpnp{hs'Lx|pwtlu{'Jvywvyh{pvu5

 

Output

*CDC is the trademark of the Control Data Corporation.
*IBM is a trademark of the International Business Machine Corporation.
*DEC is the trademark of the Digital Equipment Corporation.

 

我的程序一开始是:

#include<cstdio>

#include<cstring>

using namespace std;

int main(){

       char ch[1000];

       while(scanf("%s",ch)!=NULL){

              int str =strlen(ch);

              for(int i = 0;i<str; i++)

                     ch[i]-=7;

              printf("%s\n",ch);

       }

       return 0;

}

可是结果却是超时,然后我了解到strlen函数会花费的时间较多,所以我就改用指针来写了:

#include<cstdio>
#include<cstring>
using namespace std;
int main(){
 char ch[1000];
 while(scanf("%s", ch)!=NULL){
  char *str = ch;
  while(*str!='\0'){
   *str = *str-7;
   str++;
  }
   
  printf("%s\n",ch );
 }
 return 0;
}

 但是结果还是超时。最后我是用gets函数替代了scanf函数,最后才AC了:

#include<cstdio>

using namespace std;

int main(){

       char ch[1000];

       while(gets(ch)!=NULL){

              char *str = ch;

              while(*str!='\0'){

                     *str =*str-7;

                     str++;

              }       

              printf("%s\n",ch);

       }

       return 0;

}

虽然现在还是不懂为什么,但是先把疑问搁在这,慢慢再去深入了解好了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值