题目分析:
题目很简单,就是键盘上的字母错了一位,要求还原错误的文章。
算法分析:
我主要分了三部分,数字,大写字母,还有其他字符。设置对应的匹配数组。
代码:
#include<stdio.h>
#include<string.h>
/*char digit[12],upercase[27],ch[15],match[15];*/
char str[1000][200];
void print(int n)
{
int i;
for(i=0;i<n;i++)
printf("%s/n",str[i]);
}
int main()
{
/*
freopen(".in","r",stdin);
freopen(".out","w",stdout);
*/
int i,j,len,k,n;
char digit[]={'9','`','1','2','3','4','5','6','7','8'};
char upercase[]={'*','V','X','S','W','D','F','G','U','H','J','K','N','B','I','O','*','E','A','R','Y','C','Q','Z','T','*'};
char ch[]={'-','=','[',']','//',';','/'',',','.','/'};
char match[]={'0','-','P','[',']','L',';','M',',','.'};
i=0;
while(1)
{
if(gets(str[i])==NULL)
break;
i++;
}
n=i;
for(i=0;i<n;i++)
{
len=strlen(str[i]);
for(j=0;j<len;j++)
{
if(str[i][j]==' ')
continue;
else if(str[i][j]>='0'&&str[i][j]<='9')
str[i][j]=digit[str[i][j]-'0'];
else if(str[i][j]>='A'&&str[i][j]<='Z')
str[i][j]=upercase[str[i][j]-'A'];
else
{
for(k=0;k<10;k++)
{
if(str[i][j]==ch[k])
str[i][j]=match[k];
}
}
}
}
print(i);
return 0;
}
思考;
本题主要是数组初始化的时候,我遇到点问题。首先数组必须在定义的时候初始化,害得我去掉了原来的两个子函数,现在代码很难看。还有就是字符转义的问题。‘/’,''',这些字符要用‘/’进行转义。