谁再说HDU1048是水题很简单我和他急=0=(1)—模拟字符串


这个实在是怨念深重的一个问题,没想到用它来开篇了,加密解密的,凯撒密码的变种,字符串模拟中最简单最简单的一类,但是让输入输出给搞死了,暑假搞死,现在依然被搞了30MIN,真是弱爆了。


这个题INPUT SAMPLE:

START

NS BFW ……一堆……

END

START

……一堆……

END

……

ENDOFINPUT

 

OUTPUT:

IN WAR……解密之后的,连规则都告诉你了。

 

起初写了一个“无懈可击”的,OF COURSE,至少从肉眼上看上去是……

#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;


string encoding="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string decoding="VWXYZABCDEFGHIJKLMNOPQRSTU";

int main()
{
	string shuru;
	while(cin>>shuru && shuru!="ENDOFINPUT")
	{
		if(shuru=="START")
		{
			char needtodec[100];
			string ctrl;
				cin.getline(needtodec,100);
				cin>>ctrl;	
			int i,j;
			for(i=0;i<=strlen(needtodec);i++)
			{
			     for(j=0;j<26;j++)
			     {
			     	if(needtodec[i]==encoding[j])
			     	{
	     				needtodec[i]=decoding[j];
	     			 }
	     			
			     }
			}
			if(ctrl=="ENDOFINPUT")
			{
				return 0;
			}
		}
	}
	return 0;
}

(第1个TRAP)自己运行改程序,毫无结果。

后来查阅该问题,发现cin之后,空格还存在缓冲区里呢……

于是添加fflush(stdin),无效……

再查阅,改为cin.sync(),无效……

Cin.clear(),无效……

传说fgets()忽略之前缓冲区,结果还是无效……

顿时头大了。

看题解,发现只有gets()可以用用,自己探索,getchar()也可以忽略空格。

 

(第二个TRAP)

好吧,使用了getchar(),能输出了,输出看一下……

不对?!怎么NS BFW翻译出来的是IN RAR?不是WAR吗?

于是开始怀疑自己小学时没好好学英语,英语顺序背错了,重打一遍,结果还是RAR,所有B对应的都是R不是W。

仔细一看,R对着W,B对着W,B->R->W,坑啊。

加上break;后,问题解决。

一道做过的老题,时隔数月掉沟里,真不容易。

顿时感觉自己真的真的只能做做A+B了,不对,连A+B都错……不信看看“一寸山河一寸血”的A+B PRETICE VII……

还是从头再来吧,附正确且麻烦的版本一个。

#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;


char encoding[]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char decoding[]="VWXYZABCDEFGHIJKLMNOPQRSTU";

int main()
{
	char shuru[1050];
	while(gets(shuru) && strcmp(shuru,"ENDOFINPUT"))
	{
		if(! strcmp(shuru, "START") || ! strcmp(shuru, "END"))
            continue;
  
	
			int i,j;
			for(i=0;i<=strlen(shuru);i++)
			{
			     for(j=0;j<26;j++)
			     {
			     	if(shuru[i]==encoding[j])
			     	{
	     				shuru[i]=decoding[j];
	     				break;//holy shit!!
	     			}
	     			
			     }
			     
			}
			
			printf("%s\n",shuru);
		}
			return 0;
	}


 

第一次三天解禁用CSDN,略兴奋,写的挺长的……
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值