liwenhao96 发表于 2013-11-10 21:37:14

关于C语言的一道题

求大神!

friendan 发表于 2013-11-10 21:37:15

本帖最后由 friendan 于 2013-11-11 00:01 编辑

1楼是C++代码,有些缺陷,不符合题目要求。
楼主给的分少了点,望以后多给点呀。
效果截图:

代码打包下载:

我也贴下代码吧:#include <stdio.h>
#include <string.h>

//加密电文函数
char *JiaMi(char arr[])
{
      //明文数组和密文数组
      char MingWen[]={"abcdefghijklmnopqrstuvwxyz"};
      char MiWen[]={"0123456789abcdefghi@#$%&!*"};

       unsignedj=0;
      for(j=0;j<strlen(arr);j++)
      {
                if(32==arr)//空格译成j
                {
                              arr='j';
                              continue;
                }
                for(int k=0;k<26;k++)//寻找与明文匹配的密文
                {
                        if(MingWen==arr)
                        {
                              arr=MiWen;
                        }
                }
      }
      return arr;
}

void main ()
{
      
      char dw1[]={"ni hao"};//电文1
      char dw2[]={"fish"};//电文2
      char dw3[]={"china man is ok"};//电文3
      char dw4[]={"满足其它字符不变哦(只加密a到z和空格)...ok123"};//电文4

      //开始加密(注:空格加密成j)
      printf("%s",dw1);
      printf("加密结果为:\n%s\n\n",JiaMi(dw1));
      printf("%s",dw2);
      printf("加密结果为:\n%s\n\n",JiaMi(dw2));
      printf("%s",dw3);
      printf("加密结果为:\n%s\n\n",JiaMi(dw3));
      printf("%s",dw4);
      printf("加密结果为:\n%s\n\n",JiaMi(dw4));
      
}



mr.yycao 发表于 2013-11-10 22:33:16

#include<iostream.h>
#include<string.h>

void main()
{
        char s;
        cin.getline(s,100);
        int i=0;
        while(s!='\0')
                i++;
        for(int j=0;j<i;j++)
        {
                switch(s)
                {
                        case'a':s='0';break;
                        case'b':s='1';break;
                        case'c':s='2';break;
                        case'd':s='3';break;
                        case'e':s='4';break;
                        case'f':s='5';break;
                        case'h':s='6';break;
                        case'i':s='7';break;
                        case'j':s='8';break;
                        case'k':s='9';break;
                        case'l':s='a';break;
                        case'm':s='b';break;
                        case'n':s='c';break;
                        case'o':s='d';break;
                        case'p':s='e';break;
                        case'q':s='f';break;
                        case'r':s='h';break;
                        case's':s='i';break;
                        case't':s='@';break;
                        case'u':s='#';break;
                        case'v':s='$';break;
                        case'w':s='%';break;
                        case'x':s='&';break;
                        case'y':s='!';break;
                        case'z':s='*';break;
                        default:s='j';break;
                }
        }
        cout<<s<<endl;

}
测试用例:abcdef uvwxyz
输出结果:012345j#$%&!*

mr.yycao 发表于 2013-11-10 22:34:15

不好意思,其他字符不变没看见,你自己再调调吧

龙羽 发表于 2013-11-10 23:54:46

本帖最后由 龙羽 于 2013-11-11 00:00 编辑

friendan 发表于 2013-11-10 23:04 static/image/common/back.gif
1楼是C++代码,有些缺陷,不符合题目要求。
楼主给的分少了点,望以后多给点呀。
效果截图:

改的挺快嘛不过这样初始化确实清晰不少

friendan 发表于 2013-11-11 00:00:48

龙羽 发表于 2013-11-10 23:54 static/image/common/back.gif
哈哈 刚想说你代码第十一行有错自己就改了 挺快嘛 不过这样初始化确实清晰不少

其实还可以再优化精简的,为了方便理解就这样吧。

565123 发表于 2013-11-11 00:18:44

本帖最后由 565123 于 2013-11-11 01:03 编辑

#include <string>
#include <iostream>

std::string & encode(std::string & str){
        char * chs = new char;
        for (int i = 0; i < str.length(); i++){
                if (str >= 'a')
                {
                        if (str <= 'a' + 9)chs = str - 'a' + '0';
                        else if (str <= 's')chs = str - 10;
                        else if (str == 't')chs = '@';
                        else if (str <= 'x')chs = str - 'u' + '#';
                        else if (str == 'y')chs = '!';
                        else if (str == 'z')chs = '*';
                }
                else if (str == ' ')
                {
                        chs = 'j';
                }
                else
                {
                        chs = str;
                }
        }
        chs = 0;
        std::string * passwd = new std::string(chs);
        delete chs;
        return *passwd;
}

int main() {
        std::string str;
        std::cout << "请输入要加密的字符" << std::endl;
        std::getline(std::cin, str);
        std::string & passwd = encode(str);
        const char * chs = passwd.c_str();
        std::cout << chs << std::endl;
        delete &passwd;
}
页: [1]
查看完整版本: 关于C语言的一道题