千家信息网

C++如何实现二维数组螺旋加密信息

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,小编给大家分享一下C++如何实现二维数组螺旋加密信息,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!由题目要求可知 题目要求先创建一个r行c列的矩阵然后输入一串字符串 字符串长度肯定小
千家信息网最后更新 2025年01月16日C++如何实现二维数组螺旋加密信息

小编给大家分享一下C++如何实现二维数组螺旋加密信息,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

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

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

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

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

string a;cin>>a;

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

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

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

转ASCII码都知道 强类型转换

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

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

for(int count0=0;count0

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

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

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

重头戏来了

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

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

故思路是:

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

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

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

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

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

代码如下:

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循环

for(i=0;i

看完了这篇文章,相信你对"C++如何实现二维数组螺旋加密信息"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

0