给位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;
}
}
-------------------------------------------------------------------------------------------------------------------
#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);
}
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;
}
"字母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
已发邮箱本回答被提问者采纳