鱼C论坛

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

关于C语言的一道题

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

最佳答案

查看完整内容

1楼是C++代码,有些缺陷,不符合题目要求。 楼主给的分少了点,望以后多给点呀。 效果截图: 代码打包下载: 我也贴下代码吧:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

       unsigned  j=0;
        for(j=0;j<strlen(arr);j++)
        {
                if(32==arr[j])//空格译成j
                {
                                arr[j]='j';
                                continue;
                }
                for(int k=0;k<26;k++)//寻找与明文匹配的密文
                {
                        if(MingWen[k]==arr[j])
                        {
                                arr[j]=MiWen[k];
                        }
                }
        }
        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));
       
}

想知道小甲鱼最近在做啥?请访问 -> 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#$%&!*
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-10 22:34:15 | 显示全部楼层
不好意思,其他字符不变没看见,你自己再调调吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

改的挺快嘛不过这样初始化确实清晰不少
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

其实还可以再优化精简的,为了方便理解就这样吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[str.length() + 1];
        for (int i = 0; i < str.length(); i++){
                if (str[i] >= 'a')
                {
                        if (str[i] <= 'a' + 9)chs[i] = str[i] - 'a' + '0';
                        else if (str[i] <= 's')chs[i] = str[i] - 10;
                        else if (str[i] == 't')chs[i] = '@';
                        else if (str[i] <= 'x')chs[i] = str[i] - 'u' + '#';
                        else if (str[i] == 'y')chs[i] = '!';
                        else if (str[i] == 'z')chs[i] = '*';
                }
                else if (str[i] == ' ')
                {
                        chs[i] = 'j';
                }
                else
                {
                        chs[i] = str[i];
                }
        }
        chs[str.length()] = 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 09:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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