鱼C论坛

 找回密码
 立即注册
查看: 3820|回复: 6

关于C语言的一道题

[复制链接]
发表于 2013-11-10 21:37:14 | 显示全部楼层 |阅读模式
1鱼币
照片.jpg 求大神!

最佳答案

查看完整内容

1楼是C++代码,有些缺陷,不符合题目要求。 楼主给的分少了点,望以后多给点呀。 效果截图: 代码打包下载: 我也贴下代码吧:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-10 21:37:15 | 显示全部楼层
本帖最后由 friendan 于 2013-11-11 00:01 编辑

1楼是C++代码,有些缺陷,不符合题目要求。
楼主给的分少了点,望以后多给点呀。
效果截图:
1.png
代码打包下载:
加密电文.zip (675 Bytes, 下载次数: 3)
我也贴下代码吧:
  1. #include <stdio.h>
  2. #include <string.h>

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

  9.        unsigned  j=0;
  10.         for(j=0;j<strlen(arr);j++)
  11.         {
  12.                 if(32==arr[j])//空格译成j
  13.                 {
  14.                                 arr[j]='j';
  15.                                 continue;
  16.                 }
  17.                 for(int k=0;k<26;k++)//寻找与明文匹配的密文
  18.                 {
  19.                         if(MingWen[k]==arr[j])
  20.                         {
  21.                                 arr[j]=MiWen[k];
  22.                         }
  23.                 }
  24.         }
  25.         return arr;
  26. }

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

  34.         //开始加密(注:空格加密成j)
  35.         printf("%s",dw1);
  36.         printf("加密结果为:\n%s\n\n",JiaMi(dw1));
  37.         printf("%s",dw2);
  38.         printf("加密结果为:\n%s\n\n",JiaMi(dw2));
  39.         printf("%s",dw3);
  40.         printf("加密结果为:\n%s\n\n",JiaMi(dw3));
  41.         printf("%s",dw4);
  42.         printf("加密结果为:\n%s\n\n",JiaMi(dw4));
  43.       
  44. }

复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-10 22:33:16 | 显示全部楼层
#include<iostream.h>
#include<string.h>

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

}
测试用例:abcdef uvwxyz
输出结果:012345j#$%&!*
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-10 22:34:15 | 显示全部楼层
不好意思,其他字符不变没看见,你自己再调调吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-10 23:54:46 | 显示全部楼层
本帖最后由 龙羽 于 2013-11-11 00:00 编辑

改的挺快嘛不过这样初始化确实清晰不少
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-11 00:00:48 | 显示全部楼层
龙羽 发表于 2013-11-10 23:54
哈哈 刚想说你代码第十一行有错  自己就改了 挺快嘛 不过这样初始化确实清晰不少

其实还可以再优化精简的,为了方便理解就这样吧。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-11-11 00:18:44 | 显示全部楼层
本帖最后由 565123 于 2013-11-11 01:03 编辑
  1. #include <string>
  2. #include <iostream>

  3. std::string & encode(std::string & str){
  4.         char * chs = new char[str.length() + 1];
  5.         for (int i = 0; i < str.length(); i++){
  6.                 if (str[i] >= 'a')
  7.                 {
  8.                         if (str[i] <= 'a' + 9)chs[i] = str[i] - 'a' + '0';
  9.                         else if (str[i] <= 's')chs[i] = str[i] - 10;
  10.                         else if (str[i] == 't')chs[i] = '@';
  11.                         else if (str[i] <= 'x')chs[i] = str[i] - 'u' + '#';
  12.                         else if (str[i] == 'y')chs[i] = '!';
  13.                         else if (str[i] == 'z')chs[i] = '*';
  14.                 }
  15.                 else if (str[i] == ' ')
  16.                 {
  17.                         chs[i] = 'j';
  18.                 }
  19.                 else
  20.                 {
  21.                         chs[i] = str[i];
  22.                 }
  23.         }
  24.         chs[str.length()] = 0;
  25.         std::string * passwd = new std::string(chs);
  26.         delete chs;
  27.         return *passwd;
  28. }

  29. int main() {
  30.         std::string str;
  31.         std::cout << "请输入要加密的字符" << std::endl;
  32.         std::getline(std::cin, str);
  33.         std::string & passwd = encode(str);
  34.         const char * chs = passwd.c_str();
  35.         std::cout << chs << std::endl;
  36.         delete &passwd;
  37. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-11 01:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表