标题:加密解密,字符窜排序问题
只看楼主
gtrmao
Rank: 2
等 级:论坛游民
帖 子:38
专家分:32
注 册:2011-10-24
结帖率:75%
已结贴  问题点数:20 回复次数:6 
加密解密,字符窜排序问题
要求是在客服端输入一段字符,将其中的小写字母按如下改变:a->b,b->c...z->a其他字符不变。在服务器端收到加密后的字符窜后按源加密规则解密。
小弟不才,求高手指点~
搜索更多相关主题的帖子: 加密 解密 客服端 
2012-01-07 17:02
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:7 
程序代码:
#include <stdio.h>
#include <string.h>

char* encrypt(char* buffer, int length) {
   int i;

   for (i = 0; i < length; ++i)
      if (buffer[i] >= 'a' && buffer[i] < 'z')
         ++buffer[i];
      else if (buffer[i] == 'z')
         buffer[i] = 'a';

   return buffer;
}

char* decrypt(char* buffer, int length) {
   int i;

   for (i = 0; i < length; ++i)
      if (buffer[i] > 'a' && buffer[i] <= 'z')
         --buffer[i];
      else if (buffer[i] == 'a')
         buffer[i] = 'z';

   return buffer;
}

int main(void) {
   char str1[] = "Hello, world!";
   char str2[] = "abcdefgHijklmnopqRstuvwxyz";
   int len1 = strlen(str1);
   int len2 = strlen(str2);

   printf("str1 encrypted: %s\n", encrypt(str1, len1));
   printf("str2 encrypted: %s\n", encrypt(str2, len2));

   printf("str1 decrypted: %s\n", decrypt(str1, len1));
   printf("str2 decrypted: %s\n", decrypt(str2, len2));

   return 0;
}

/*
str1 encrypted: Hfmmp, xpsme!
str2 encrypted: bcdefghHjklmnopqrRtuvwxyza
str1 decrypted: Hello, world!
str2 decrypted: abcdefgHijklmnopqRstuvwxyz
*/


[ 本帖最后由 lz1091914999 于 2012-1-7 19:51 编辑 ]

My life is brilliant
2012-01-07 19:40
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
得分:7 
程序代码:
#include <stdio.h>

#define ASC_LEN         (26)
#define ASC_INC(asc)    (asc = 'a' + ((++asc-'a')%ASC_LEN))
//#define ASC_INC(asc)  (asc-'a'%ASC_LEN, asc = (asc+1)) //error!!!

int main(int argc, char *argv[])
{
    char s[] = "szzzlkjflskdjfsdfxcvxcvaa";
    int i;
    for (i = 0; i < sizeof(s) - 1; i++) {
        putchar(ASC_INC(s[i]));
    }
    return 0;   
}


[ 本帖最后由 zaixuexi 于 2012-1-7 21:01 编辑 ]

技术问题,请不要以短消息方式提问
2012-01-07 20:53
lonmaor
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:郑州
等 级:版主
威 望:75
帖 子:2637
专家分:6423
注 册:2007-11-27
得分:7 
3楼的代码可以正常处理z->a么?

从不知道到知道,到知道自己不知道,成长的道路上脚步深深浅浅
2012-01-07 21:53
gtrmao
Rank: 2
等 级:论坛游民
帖 子:38
专家分:32
注 册:2011-10-24
得分:0 
各位高手,如果输入的是cbaHHabc的话,按要求是ccbHHbaa.但是我的程序
#include <stdio.h>
#include"ctype.h"
#define MAX 100
void sort(char str[])
{
    char t;
    int i,j,n;
    n=strlen(str);
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(islower(str[j]))
            {
                if(str[j]>str[j+1])
                {
                    t=str[j];
                    str[j]=str[j+1];
                    str[j+1]=t;
                }
            }
        }
    }
}
int main(void)
{
    char str[MAX];
    gets(str);
    sort(str);
    puts(str);
    return 0;
}


只能做到cbaHHcba而不是ccbHHbaa。求高手指点
2012-01-07 23:06
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
得分:0 
程序代码:
#include <stdio.h>

#define INCR(ch) ('a' + ((((ch) + 1) - 'a') % 26))
#define DECR(ch) ('a' + ((((ch) - 'a' - 1) + 26) % 26))

char* encrypt(char* buffer, int length) {
   int i;

   for (i = 0; i < length; ++i)
      buffer[i] = INCR(buffer[i]);

   return buffer;
}

char* decrypt(char* buffer, int length) {
   int i;

   for (i = 0; i < length; ++i)
      buffer[i] = DECR(buffer[i]);

   return buffer;
}

int main(void) {
   char str1[] = "helloworld";
   char str2[] = "abcdefghijklmnopqrstuvwxyz";
   int len1 = sizeof str1 - 1;
   int len2 = sizeof str2 - 1;

   printf("str1 encrypted: %s\n", encrypt(str1, len1));
   printf("str2 encrypted: %s\n", encrypt(str2, len2));

   printf("str1 decrypted: %s\n", decrypt(str1, len1));
   printf("str2 decrypted: %s\n", decrypt(str2, len2));

   return 0;
}

/*
str1 encrypted: ifmmpxpsme
str2 encrypted: bcdefghijklmnopqrstuvwxyza
str1 decrypted: helloworld
str2 decrypted: abcdefghijklmnopqrstuvwxyz

Process returned 0 (0x0)   execution time : 0.437 s
Press any key to continue.
*/

My life is brilliant
2012-01-07 23:25
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
得分:0 
if (buffer[i] >= 'a' && buffer[i] < 'z')
->
#include <ctype.h>
if (islower(buffer[i]))

技术问题,请不要以短消息方式提问
2012-01-08 11:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-359311-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.085423 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved