
一道C语言练习题
任意输入一行电报文字,用条件编译方法编程实现以下功能:若需加密,则将字母后移6位,如“a“变为“g“,“u“变为“a“,数字也后移6位,如“0”变为“6”,“4”变为“0...
任意输入一行电报文字,用条件编译方法编程实现以下功能:若需加密,则将字母后移6位,如“a“变为“g“,“u“变为“a“,数字也后移6位,如“0”变为“6”,“4”变为“0”,其他符号不变。若不需加密,则原文输出。
本人初学太菜了,编不出来 展开
本人初学太菜了,编不出来 展开
5个回答
展开全部
#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个。但是我觉得这个表不应该这么短。这个问题你自己研究一下吧。
#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个。但是我觉得这个表不应该这么短。这个问题你自己研究一下吧。
展开全部
判断—>需要加密 字符=字符+6(还要判断+6后会不会溢出) --->输出
--> 其他-->输出
--> 其他-->输出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
void main()
{
char str[50];
int i=0;
gets(str);
while(str[i]!='\0')
{
printf("%c",str[i]+6);
i++;
}
}
void main()
{
char str[50];
int i=0;
gets(str);
while(str[i]!='\0')
{
printf("%c",str[i]+6);
i++;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//条件编译实现,定义如下的宏,若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')
#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')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询