这也算是一道水题吧,怎么说呢,就是一个灵活性的误差来源,制造误差的原因应该就是错位引起的,只要认真读好题,知道是哪一位发生了错位,错位后与错位前的关系,然后开两个字符数组,分别从头到尾依次比较就好了,遇到相同的就不断的更新,,,,应该就能很好的AC了。。。。
# include<cstdio> # include<iostream> using namespace std; # define MAX 1000+10 int main(void) { int i,j,a,b,m; char str1[MAX];//存放待输入的字符串 char str2[]={'`','1','2','3','4','5','6','7','8','9', '0','-','=','Q','W','E','R','T','Y','U', 'I','O','P','[',']','\\','A','S','D','F', 'G','H','J','K','L',';','\'','Z','X','C', 'V','B','N','M',',','.','/'}; b=sizeof(str2);//因为一个字符占一个字节,所以说sizeof的字节数就是字符的长度 //cout<<b<<endl; while(scanf("%c",&str1[0])==1) { for(i=1;str1[i-1]!='\n';i++) scanf("%c",&str1[i]); a=i-1;//不要写成a=sizeof(str1)的形式,否则后面会有乱码 for(i=0;i<a;i++) { for(j=0;j<b;j++) { if( str1[i]==str2[j] ) str1[i]=str2[j-1];//其实我们需要的是j-1位的字符 } } for(i=0;i<a;i++) printf("%c",str1[i]); printf("\n"); } return 0; }
在代码的字里行间里,我还写出了很多的注释,都是对每个相应步骤所做出来的调整,认真看看都能看懂,难度不大。
还应该注意一点,,在把键盘上的所有字符复制到字符串的过程中,一定要注意有些字符的输入和输出相对应,比如说 键盘上的 \,输入到字符串中就应该是 ‘ \\ ’。。。