一道C语言练习题

任意输入一行电报文字,用条件编译方法编程实现以下功能:若需加密,则将字母后移6位,如“a“变为“g“,“u“变为“a“,数字也后移6位,如“0”变为“6”,“4”变为“0... 任意输入一行电报文字,用条件编译方法编程实现以下功能:若需加密,则将字母后移6位,如“a“变为“g“,“u“变为“a“,数字也后移6位,如“0”变为“6”,“4”变为“0”,其他符号不变。若不需加密,则原文输出。

本人初学太菜了,编不出来
展开
 我来答
能了假玩包27
2008-10-26 · TA获得超过1054个赞
知道小有建树答主
回答量:1087
采纳率:0%
帮助的人:975万
展开全部
#include<stdlib.h>
#include<stdio.h>
#define SECRET 6;

void encode( char *p )
{
while (*p != '\0')
{
if (*p<'z' && *p>='a')
{
*p += SECRET;
if ( *p>'z' )
{
*p -= 26;
}
}
else if (*p=='z')
{
*p -= 20;
}
else if (*p<='Z' && *p>='A')
{
*p += SECRET;
if (*p>'Z')
{
*p -= 26;
}
}
else if (*p<='9' && *p>='0')
{
*p += SECRET;
if (*p>'9')
{
*p -= 10;
}
}

p++;
}
}

main()
{
char *Strings;
const char yOrn;

printf("\nDo you want ciphertext? y or n\n");
scanf( "%c", &yOrn);

printf("Please input your message, end with Enter:\n");
scanf( "%s", Strings);

switch( yOrn )
{
case 'y':
case 'Y':
encode(Strings);
printf( "Your ciphertext: \n%s\n", Strings );
break;

case 'n':
case 'N':
printf( "Your message: \n%s\n", Strings );
break;

default:
printf("error.");
break;
}
}

试过了,可以。但是这里有个问题似是而非,你可以看见,我把字符‘z’单独列出来了,因为用*p<='z'列在一起的时候z转码后是乱码,其他都不会,看了一眼ascii简表,好像‘z’后面剩下的字符不足6个。但是我觉得这个表不应该这么短。这个问题你自己研究一下吧。
sonictails1
2008-10-26 · TA获得超过199个赞
知道答主
回答量:145
采纳率:0%
帮助的人:130万
展开全部
判断—>需要加密 字符=字符+6(还要判断+6后会不会溢出) --->输出
--> 其他-->输出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lumingyuan25
2008-10-26 · 超过32用户采纳过TA的回答
知道答主
回答量:180
采纳率:0%
帮助的人:109万
展开全部
#include<stdio.h>

void main()
{
char str[50];
int i=0;
gets(str);
while(str[i]!='\0')
{
printf("%c",str[i]+6);
i++;
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hemoparrot
2008-10-26 · TA获得超过326个赞
知道小有建树答主
回答量:199
采纳率:0%
帮助的人:129万
展开全部
//条件编译实现,定义如下的宏,若x为1,则加密,为0则不加密
#define ENCRYPTION x

char ch;
do
{
ch=getchar();
#if ENCRYPTION
if(ch>='a'&&ch<='z')
{
ch+=6;
if(ch>'z')
ch-=26;
}
if(ch>='A'&&ch<='Z')
{
ch+=6;
if(ch>'Z')
ch-=26;
}
if(ch>='0'&&ch<='9')
{
ch+=6;
if(ch>'9')
ch-=10;
}
#endif
putchar(ch);
}while(ch!='\0')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_fmlyht
2008-10-26 · TA获得超过2359个赞
知道大有可为答主
回答量:2398
采纳率:0%
帮助的人:1978万
展开全部
#include <stdio.h>
#include <string.h>

int turncode(char *str)
{
char c;
int i,strl=strlen(str);
for(i=0;i<strl;i++)
{
c=str[i];
if(((c>47)&&(c<52))||((c>64)&&(c<85))||((c>96)&&(c<117))) str[i]+=6;
elseif((c>51)&&(c<58))) str[i]-=4;
elseif(((c>84)&&(c<91))||((c>116)&&(c<123))) str[i]-=20;
}
}
int main()
{
char encrypt,ECode[];
printf(".......\n");
scanf("%s",ECode);
printf("encrypt?Y/N");
encrypt=getchar();
if(encrypt=="Y"||encrypt=="y") turncode(ECode);
printf("\n......\n%s",ECode);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式