c语言:有一行电文,按如下规律加密,将每个字母变为其后的第四个字母,非字母字符不变,电文从键盘输入,

给位c语言界的大神啊,我刚刚学到字符数组,麻烦不要弄的不懂的语句啊!拜托!!

第1个回答  2011-03-05
是不是后移四位啊,就是a变为e
-------------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
#define MAXLINE 100
void code(char *);

void main()
{
char line[MAXLINE];
printf("Input the string:");
gets(line);
code(line);
printf("The result is: %s\n",line);
}

void code(char *s)
{
while (*s!='\0')
{
if((*s>='a' && *s<='v')||(*s>='A' && *s<='V'))
*s= *s+4;
else if((*s>='w' && *s<='z')||(*s>='W' && *s<='Z'))
*s=*s+4-26;
s=s+1;
}
}
第2个回答  2011-03-05
#include<stdio.h>
void main()
{
char a[100]={0},b[100]={0};
int i=0;
printf("请输入电文:");
scanf("%s",a);
for(i=0;i<sizeof(a)-1;i++)
if((a[i]<91&&a[i]>64) || (a[i]<123&&a[i]>96))
b[i]=a[i]+4;
else
b[i]=a[i];

printf("原文是:%s\n",a);
printf("加密后是:%s\n",b);

}
第3个回答  2011-03-06
-128 ~ 127)

"字母Z向后错8位后在ASCII码表中进入了小写字母的范围"
pa=*pa+*pb;
if(*pa>'Z'||*pa>'z')
那是因为*pa的内容先被修改了,才做判断。当*pa原来是'Z'时,比如+9,就是99,进入了小写范围。这时你做判断if(*pa>'Z'||*pa>'z')就不对了。
先判断大小写,再分别对待,别嫌麻烦

我的代码
int main()
{
char s1[81];
char s2[81];

scanf("%s", s1);
scanf("%s", s2);

printf("\n");

unsigned char c1, c2; // 关键unsigned
for(int i=0; s1[i]!='\0' && s2[i]!='\0'; i++)
{
c1 = s1[i];
c2 = s2[i] - '0';

if(c1<'a') //大写字母(这里为了简单,默认都是英文字母)
{
c1 = s1[i] + c2;
if(c1>'Z')
c1 -= 26;
}
else //不是大写,那就是小写咯
{
c1 = s1[i] + c2;
if(c1>'z')
c1 -= 26;

}
s1[i] = c1;
}

printf("%s\n\n", s1);

return 0;
}
第4个回答  2011-03-06
已发邮箱本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网