服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++二维数组螺旋加密信息

C++二维数组螺旋加密信息

2022-08-04 10:06Stupefy. C/C++

大家好,本篇文章主要讲的是C++二维数组螺旋加密信息,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

C++二维数组螺旋加密信息

C++二维数组螺旋加密信息

由题目要求可知 题目要求先创建一个r行c列的矩阵

然后输入一串字符串 字符串长度肯定小于r*c/5

由A C M的表示方式可以看出每个字符由5位的二进制位系统表示(无符号位)

那么我们首先可以先创建一个字符串类型

?
1
2
string a;
cin>>a;

rt 字母表示它是26字母表中第几个字母

很多人第一时间想用数组11对应 或者switch语句选择

但转念一想就知道太麻烦了 所以这里用字符的ASCII码减去64来表示它的数字形式

转ASCII码都知道 强类型转换

由于不止一个字符 为了提高代码的复用性 我们专门写个函数来返回字母的数字形式的二进制值

?
1
2
3
4
5
6
7
8
9
10
11
int bit(char a)  //定义一个将字母转换为二进制数的函数 返回二进制数
{
    int num=int(a)-64;
    int result = 0, j = 1;
    while(num){
        result = result + j * (num % 2);
        num = num / 2;
        j = j * 10;
    }
    return result;
}

二进制值有了 还得确保每个字母都能转换为5位的二进制系统

故在循环之中再套循环 像00011这种啥数据类型都不是的玩意儿 最好直接给它套数组里去 所以我们先定义个数组

然后按流程把1和0放进去 并通过while循环补全0

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for(int count0=0;count0<a.size();count0++)
    {
        int Tbits=bit(a[count0]);    //得到二进制数
        digits=judge(Tbits);  //判断位数 将5位2进制数补全0
        times=digits-1;      //获取位数
        //从而将二进制数各个位数上的数字准确的填入数组
        while(digits!=5)
        {
            arr[s]=0;
            digits++;
            s++;
        }
        while(Tbits!=0)
       {
           d=Tbits%10; // 从最小位数开始
           arr[s+times]=d;
           Tbits/=10;
           times--;
        }
        s=5*(count0+1); //每个数都是5位 故让每循环完一个字母让索引+5
    }

这时我就达到了把每个5位二进制位系统的值都放进数组里去

但是根据题意可知 有空缺的地方 需要用0填充 故写个for循环将剩下的空用0填充

?
1
2
3
4
for(int count1=a.size()*5;count1<(r*c);count1++)
    {
        arr[count1]=0; //将剩余的位置用0填充
    }

重头戏来了

如何螺旋式将这个数组的每个数填到二维数组中去呢?

根据题意可知 填充方向是右下左上

故思路是:

先填充第一行 再填充最后一列 再填充最后一行 再填充第一列

填充完第一行 起始行变量+1

填充完最后一列 末列变量-1

填充完最后一行 末行变量-1

填充完第一列 起始列变量+1

代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int iStart=0,iEnd=r-1,jStart=0,jEnd=c-1,times1=0,i,j;
    while(iEnd>=iStart&&jEnd>=jStart){
        //上面的行
        for(j=jStart;j<=jEnd;j++){
            array[iStart][j]=arr[times1];
            times1++;
        }
        iStart++;
        //右边的列
        for(i=iStart;i<=iEnd;i++){
            array[i][jEnd]=arr[times1];
            times1++;
        }
        jEnd--;
        //下面的行
        if(iEnd>=iStart){
            for(j=jEnd;j>=jStart;j--){
                array[iEnd][j]=arr[times1];
                times1++;
            }
            iEnd--;
        }
        //左边的列
        if(jEnd>=jStart){
            for(i=iEnd;i>=iStart;i--){
                array[i][jStart]=arr[times1];
                times1++;
            }
            jStart++;
        }
    }

根据题意 还有一个大坑 这个恶心的出题人让我们正常打印 即第一行 第二行 第三行....

真是处处都是坑

故直接一个嵌套for循环

?
1
2
3
4
5
6
for(i=0;i<r;i++){
        for(j=0;j<c;j++){
            cout<<array[i][j];
        }
    }
}

完成!

到此这篇关于C++二维数组螺旋加密信息的文章就介绍到这了,更多相关C++二维数组螺旋加密内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/m0_55169129/article/details/122236894

延伸 · 阅读

精彩推荐
  • C/C++Qt5.9继承QObject创建多线程实例

    Qt5.9继承QObject创建多线程实例

    本文主要介绍了Qt5.9继承QObject创建多线程实例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    三公子Tjq7182022-01-11
  • C/C++手把手带你搞懂C语言指针

    手把手带你搞懂C语言指针

    这篇文章主要介绍了C语言的指针,本文给大家介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下,希望能给你带来帮助...

    宝全哥哥10602021-12-23
  • C/C++VS2010/MFC编程(常用控件:树形控件Tree Control控件创建h和实例)

    VS2010/MFC编程(常用控件:树形控件Tree Control控件创建h和实例)

    本篇文章介绍了VS2010/MFC编程:常用控件:树形控件Tree Control,包括树形控件的创建、CTreeCtrl类的主要成员函数和应用实例有兴趣的可以了解一下。...

    鸡啄米11772021-04-24
  • C/C++c++11&14-多线程要点汇总

    c++11&14-多线程要点汇总

    这篇文章主要介绍了c++11&14-多线程的使用方法,文中代码非常详细,方便大家更好的参考和学习,感兴趣的朋友快来了解下...

    晟夏的叶4362021-09-09
  • C/C++详解C语言数组中是以列优先吗

    详解C语言数组中是以列优先吗

    这篇文章主要给大家介绍了关于C语言指针名称及所指变量的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C语言具有一定的参考学习...

    robinhhu7152021-08-06
  • C/C++C++实现查壳程序代码实例

    C++实现查壳程序代码实例

    这篇文章主要介绍了C++实现查壳程序代码实例,有比较详细的注释,包含了对原理的说明,有一定的参考借鉴价值,需要的朋友可以参考下...

    C++教程网5672021-02-05
  • C/C++c语言实现http下载器的方法

    c语言实现http下载器的方法

    这篇文章主要介绍了c语言实现http下载器的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    锅锅是锅锅9642021-12-08
  • C/C++C语言实现大数据文件的内存映射机制

    C语言实现大数据文件的内存映射机制

    这篇文章主要介绍了C语言实现大数据文件的内存映射机制的相关资料,需要的朋友可以参考下...

    C语言中文网12602021-04-25