"og:type" content="webpage">" /> "> C语言编程问题:从键盘上输入一个字符串按照以下规则对其加密。_CMS教程_内存溢出

阅读 16

C语言编程问题:从键盘上输入一个字符串按照以下规则对其加密。,第1张

#include <stdioh>

int main()

{

int i=0;

char string[50];

gets(string);

puts(string);

while(string[i] != '\0')

{

if(string[i]>='a'&&string[i]<='z')

{

string[i]=(string[i]+3-'a')%26+'a';

}

else if(string[i]>='A'&&string[i]<='Z')

{

string[i]=(string[i]+3-'A')%26+'A';

}

i++;

}

puts(string);

return 0;

}

#include<stdioh>

void secret(char s[]){

int i=0;

while(s[i]!='\0'){

    if('0'<=s[i]&&s[i]<='9')

            s[i]=9-(s[i]-'0')+'0';

        else if('a'<=s[i]&&s[i]<='z')

            s[i]=25-(s[i]-'a')+'a';

        else if('A'<=s[i]&&s[i]<='Z')

            s[i]=25-(s[i]-'A')+'A'; 

        if('#'==s[++i]) s[i]='\0'; 

    }      

}

int main(){

char s[80];

printf("enter s:\n");

scanf("%s",s);

    secret(s);

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

}

运行结果:

[willie@localhost zhidao]$ gcc yunsuanc -o yunsuano

[willie@localhost zhidao]$ /yunsuano

enter s:

osnbUEp39snS#

lhmyFVk60hmH

加密解密的算法都没错,错的是解密程序里的文件 *** 作方法。

rewind(fp)没有必要。因为fp已经被close了。一般不推荐同时对一个文件又读又写,因为这样会导致很多缓冲区同步的问题

。比如:

fputc()和getc()之间,必须要调用fflush(fp);

即使这样,还是会有问题。比如回车,getc()可能会返回两个字符,\n和\a。但是用fputc()写入的时候,分别写入\n和\a会把第二行第一个字符覆盖掉。

正确的做法是:先把解密的数据保存到字符串

里,全部结束之后,一次性把解密完的字符串写到文件里去。

void main()

{

char ch,name[30];

char content[1000];

int n = 0;

FILE fp;

printf("name:\a");

gets(name);

fp = fopen(name,"r+");

if(fp==NULL)

{

printf("No file: %s!\n\a",name);

return;

}

ch = getc(fp);

while(ch!=EOF)

{

if((isalpha(ch))!=0)

{

if((ch >= 'a' && ch <= 'd') || (ch >= 'A' && ch <='D'))

ch = ch + 22;

else

ch = ch - 4;

}

content[n++] = ch;

ch = getc(fp);

//ch = getc(fp);

}

content[n] = 0;

rewind(fp);

fprintf(fp, "%s", content);

fclose(fp);

printf("%s ok\a\n",name);

printf("content: %s\n", content);

printf("\n");

}

楼主,你的问题在于没有对数组

r

初始化(而s的输出没有问题),这样输出的时候找不到结束符,所以就一直输出下去,因此出现了乱码。

提出两种修改方法,这两种方法都可以避免你的问题:

1、char

r[10000]={0};

后就可以了。这样你输入的字符串不管是多长,到时后面的都是结束符。

2、上面不对r进行初始化,而修改下面

for(i=0;s[i]!='\0';i++)

{

if((s[i]<='Z')&&(s[i]>='A'))

r[i]=s[i]+3;

else

if((s[i]<='z')&&(s[i]>='a'))

r[i]=s[i]-4;

else

r[i]=s[i];

}

r[i]='\0';

//在r的后面加上结束符就可以了

#include <stdioh>

#include <ctypeh>

char encrypt(char text) {

    char c;

    char p = text;

    for (; text; ++text) {

        c = text;

        if (isdigit(c))

            text = '0' + '9' - c;

        else if (islower(c)) {

            c = c + 3;

            if (c > 'z')

                c = c - 26;

            text = c;

        } else if (isupper(c)) {

            c = c + 3;

            if (c > 'Z')

                c = c - 26;

            text = c;

        }

    }

    return p;

}

int main() {

    char text[100];

    printf("输入明文:");

    scanf("%s", text);

    printf("密文:%s\n", encrypt(text));

    getchar();

}以上就是关于C语言

编程问题:从键盘上输入一个字符串按照以下规则对其加密。全部的内容,包括:C语言编程问题:从键盘上输入一个字符串按照以下规则对其加密。、C语言:(如何对一串字符进行加密)输入一行长度小于80个字符,以#号、C语言中最简单的字符串加密解密问题!!!!希望大家帮帮忙,分不是问题 !!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:

内存溢出

原文地址:

http://outofmemory.cn/zz/9369335.html
你的
(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
佛山移动 佛山移动 一级用户组
你那个定时关机软件怎么卸载的啊
上一篇
2023-04-27
我的苹果4S可用容量 为0字节。。应用程序加起来一共才一两G,其他容量占了11G,
2023-04-27

发表评论
请登录后评论... 登录
提交

    评论列表(0条)
保存
{label} {label}