C++二維數(shù)組螺旋加密信息


由題目要求可知 題目要求先創(chuàng)建一個r行c列的矩陣
然后輸入一串字符串 字符串長度肯定小于r*c/5
由A C M的表示方式可以看出每個字符由5位的二進制位系統(tǒng)表示(無符號位)
那么我們首先可以先創(chuàng)建一個字符串類型
string a; cin>>a;
rt 字母表示它是26字母表中第幾個字母
很多人第一時間想用數(shù)組11對應(yīng) 或者switch語句選擇
但轉(zhuǎn)念一想就知道太麻煩了 所以這里用字符的ASCII碼減去64來表示它的數(shù)字形式
轉(zhuǎn)ASCII碼都知道 強類型轉(zhuǎn)換
由于不止一個字符 為了提高代碼的復(fù)用性 我們專門寫個函數(shù)來返回字母的數(shù)字形式的二進制值
int bit(char a) //定義一個將字母轉(zhuǎn)換為二進制數(shù)的函數(shù) 返回二進制數(shù)
{
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;
}二進制值有了 還得確保每個字母都能轉(zhuǎn)換為5位的二進制系統(tǒng)
故在循環(huán)之中再套循環(huán) 像00011這種啥數(shù)據(jù)類型都不是的玩意兒 最好直接給它套數(shù)組里去 所以我們先定義個數(shù)組
然后按流程把1和0放進去 并通過while循環(huán)補全0
for(int count0=0;count0<a.size();count0++)
{
int Tbits=bit(a[count0]); //得到二進制數(shù)
digits=judge(Tbits); //判斷位數(shù) 將5位2進制數(shù)補全0
times=digits-1; //獲取位數(shù)
//從而將二進制數(shù)各個位數(shù)上的數(shù)字準(zhǔn)確的填入數(shù)組
while(digits!=5)
{
arr[s]=0;
digits++;
s++;
}
while(Tbits!=0)
{
d=Tbits%10; // 從最小位數(shù)開始
arr[s+times]=d;
Tbits/=10;
times--;
}
s=5*(count0+1); //每個數(shù)都是5位 故讓每循環(huán)完一個字母讓索引+5
}這時我就達到了把每個5位二進制位系統(tǒng)的值都放進數(shù)組里去
但是根據(jù)題意可知 有空缺的地方 需要用0填充 故寫個for循環(huán)將剩下的空用0填充
for(int count1=a.size()*5;count1<(r*c);count1++)
{
arr[count1]=0; //將剩余的位置用0填充
}重頭戲來了
如何螺旋式將這個數(shù)組的每個數(shù)填到二維數(shù)組中去呢?
根據(jù)題意可知 填充方向是右下左上
故思路是:
先填充第一行 再填充最后一列 再填充最后一行 再填充第一列
填充完第一行 起始行變量+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++;
}
}根據(jù)題意 還有一個大坑 這個惡心的出題人讓我們正常打印 即第一行 第二行 第三行....
真是處處都是坑
故直接一個嵌套for循環(huán)
for(i=0;i<r;i++){
for(j=0;j<c;j++){
cout<<array[i][j];
}
}
}完成!
到此這篇關(guān)于C++二維數(shù)組螺旋加密信息的文章就介紹到這了,更多相關(guān)C++二維數(shù)組螺旋加密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- C++?使用?new?創(chuàng)建二維數(shù)組實例
- c++利用vector創(chuàng)建二維數(shù)組的幾種方法總結(jié)
- C++二維數(shù)組中數(shù)組元素存儲地址的計算疑問講解
- C++ 二維數(shù)組參數(shù)傳遞的實現(xiàn)方法
- C++二維數(shù)組中的查找算法示例
- C++中指針指向二維數(shù)組實例詳解
- C++中用new創(chuàng)建二維數(shù)組和指針數(shù)組實例代碼
- 詳解C++中的一維數(shù)組和二維數(shù)組
- C++指針數(shù)組、數(shù)組指針、數(shù)組名及二維數(shù)組技巧匯總
- C++中的不規(guī)則二維數(shù)組實現(xiàn)代碼
相關(guān)文章
C++編譯報錯:||error: ld returned 1 exit 
這篇文章主要介紹了C++編譯報錯:||error: ld returned 1 exit status|的解決方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01
c語言中單引號和雙引號的區(qū)別(順利解決從字符串中提取IP地址的困惑)
c語言中的單引號和雙引號可是有很大區(qū)別的,使用之前一定要了解他們之間到底有什么不同,下面小編就給大家詳細(xì)的介紹一下吧,對此還不是很了解的朋友可以過來參考下2013-07-07
C++ explicit關(guān)鍵字的應(yīng)用方法詳細(xì)講解
C++ explicit關(guān)鍵字用來修飾類的構(gòu)造函數(shù),表明該構(gòu)造函數(shù)是顯式的,既然有"顯式"那么必然就有"隱式",那么什么是顯示而什么又是隱式的呢?下面就讓我們一起來看看這方面的知識吧2013-09-09
Visual Studio 2022中創(chuàng)建的C++項目無法使用萬能頭<bits/stdc++.h>的
如果大家也遇到下面這種問題,可能是沒有include文件夾中沒有bits/stdc++.h,這篇文章主要介紹了Visual Studio 2022中創(chuàng)建的C++項目無法使用萬能頭<bits/stdc++.h>的解決方案,感興趣的朋友跟隨小編一起看看吧2024-02-02
C語言 以數(shù)據(jù)塊的形式讀寫文件詳解及實現(xiàn)代碼
本文主要介紹 C語言 以數(shù)據(jù)塊的形式讀寫文件,這里對相關(guān)知識資料做了整理,并附代碼示例,以便大家學(xué)習(xí)參考,有學(xué)習(xí)此部分知識的朋友可以參考下2016-08-08
基于VC中使用ForceInclude來強制包含stdafx.h的解決方法
本篇文章是對VC中使用ForceInclude來強制包含stdafx.h的解決方法進行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05

