输入一串字符和一个正整数k,将其中的英文字母加密并输出加密后的字符串,非英文字母不变。加密思想:将每个字母c加一个序数k,即用它后面的第k个字母代替,变换公式:c=c+k。如果字母为z,则后一个字母是a,也就是字母字符形成一个圆。先输字符串后输入k的值
main()
{
char s[200];
int i,k;
gets(s);
scanf("%d",&k);
for(i=0;i<strlen(s);i++)
{
if(s[i]>='a'&&s[i]<='z')
{
if(s[i]-'a'+k>25)s[i]=s[i]-26+k;
else s[i]=s[i]+k;
}
else if(s[i]>='A'&&s[i]<='Z')
{s[i]=s[i]+k;
if(s[i]>'Z')s[i]=s[i]-26;}
}
puts(s);
}
追问题目要求先输入k啊
追答我看到的题目是:“输入一串字符和一个正整数k,将其中的英文字母加密并输出加密后的字符串,非英文字母不变。”
若要求“要求先输入k”,只要交换二个语句就成了啊:
main()
{
char s[200];
int i,k;
scanf("%d",&k);
gets(s);
for(i=0;i='a'&&s[i]25)s[i]=s[i]-26+k;
else s[i]=s[i]+k;
}
else if(s[i]>='A'&&s[i]'Z')s[i]=s[i]-26;}
}
puts(s);
}
高手啊,佩服佩服!
温馨提示:答案为网友推荐,仅供参考
第1个回答 2013-11-29
#include <stdio.h>
void main()
{
char a[100] = {0};
int i = 0;
gets(a);
while (a[i] != 0)
{
if ((a[i]>='a'&& a[i]<='z') || (a[i]>='A'&& a[i]<='Z'))//检测是否为英文字母
{
a[i] = a[i]-1;//这里有一点点小问题,如果字母为z的话,就有问题了,这里是加密
}
i++;
}
解密的话,就反过来就行
puts(a);望采纳追问
void main()
{
char a[100] = {0};
int i = 0;
gets(a);
while (a[i] != 0)
{
if ((a[i]>='a'&& a[i]<='z') || (a[i]>='A'&& a[i]<='Z'))//检测是否为英文字母
{
a[i] = a[i]-1;//这里有一点点小问题,如果字母为z的话,就有问题了,这里是加密
}
i++;
}
解密的话,就反过来就行
puts(a);望采纳追问
怎么没输入k
第2个回答 2013-11-29
#include<stdio.h> main(){ char s[]={""}; int i; gets(s); for (i=0;s[i]!='\0';i++){ if (s[i]>='a' && s[i]<='z