a b c d e f g h i j
例子里输入ab,cd
a是第1个字符,那么换成a后面第1个,也就是b
b是第2个字符,那么换成b后面第2个,也就是d
到这里都没错
c是第4个字符,那么换成后面第4个,也就是g,为什么题目示例是h???
#include stdio.h
#include ctype.h
int main()
{
int i=0;
char str[1001];
fgets(str,1000,stdin);
while(str[i]){
if(islower(str[i]))
str[i]=97+(str[i]+i-96)%26;
else if(isupper(str[i]))
str[i]=65+(str[i]+i-64)%26;
i++;
}
puts(str);
return 0;
}
#includestdio.h
#includectype.h
int main()
{int i,j,err=0;
char s[21];
for(i=0;i20(s[i]=getchar())!='\n';i++)
{if(!isalpha(s[i]))
{err=1;
break;
}
if(isupper(s[i]))
{s[i]+=4;
if(s[i]'Z')s[i]-=26;
}
if(islower(s[i]))
{s[i]+=4;
if(s[i]'z')s[i]-=26;
}
}
s[i]='\0';
printf("%s\n",err?"err":s);
return 0;
}
读出每个字符,然后给它加上4就可以了,如果要还原,就用每个字符减去4.
#include stdio.h
#include string.h
void main()
{
int i,n;char str[21];
gets(str);n=strlen(str);
if(n==0) printf("error");
for(i=0;in;i++)
if((str[i]'a'||str[i]'z')(str[i]'A'||str[i]'Z'))
printf("error");
else
{
for(i=0;in;i++)
{
if((str[i]='x'str[i]='z')||(str[i]='X'str[i]='Z'))
str[i]-=22;
else str[i]+=4;
printf("%c",str[i]);
}
}
}
#includeiostream
using namespace std;
#define SKIP 4
int main(){
char str[21]="China#";
cout "译码前:" "\b " str endl;
// 这里跳过合法性检查。
for (int i = 0; i 21 str[i] != '#'; i++){
if (str[i] = 65 str[i] = 90){
if (str[i] + SKIP90) str[i] = 65 + (str[i] + SKIP - 90);// 重新到回头部。
else str[i] = str[i] + SKIP;
}
else{
if (str[i] + SKIP122) str[i] = 97 + (str[i] + SKIP - 122);// 重新到回头部。
else str[i] = str[i] + SKIP;
}
}
cout "译码后:" "\b " str endl;
return 0;
}
另外多说一句,如果A译成E,那么你举的例子:“Who”应译为“Als”就不正确了,应该是“Who”应译为“Bls”才正确。
1、在我们的编辑页面输入以下代码。
2、需要将其分成两部分进行代码的编写,因为我们通过观察会发现一部分是顺着算,一部分是逆着算,所以我们必须要分两部分来完成源代码的编辑。
3、先对“将字母A变成字母G,a变成g,B变成H,b变成h”这一部分进行源代码的编写。
4、再对第二个部分“U变成A,V变成B”来进行编写,在整个程序,我们都可以直接用IF判断语句来进行判断输出结果即可。
5、最后,我们的编代码编写完成后,点击“运行”,弹出输入页面之后,在输入面板输入任意一个电文字符,然后点击回车键即可得出我们的对应的相应密码。