这也算是一道水题吧,怎么说呢,就是一个灵活性的误差来源,制造误差的原因应该就是错位引起的,只要认真读好题,知道是哪一位发生了错位,错位后与错位前的关系,然后开两个字符数组,分别从头到尾依次比较就好了,遇到相同的就不断的更新,,,,应该就能很好的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;
}
在代码的字里行间里,我还写出了很多的注释,都是对每个相应步骤所做出来的调整,认真看看都能看懂,难度不大。
还应该注意一点,,在把键盘上的所有字符复制到字符串的过程中,一定要注意有些字符的输入和输出相对应,比如说 键盘上的 \,输入到字符串中就应该是 ‘ \\ ’。。。