整數拆分依次存入字符數組
給定一串整數,該如何存入字符數組,這在軟件編程看來,似乎不是很必要的,尤其在接下來的操作中,會有把數組不停位移的操作,原因很簡單:
寫這篇文章的時候,我主要用在單片機開發上,我儘量把代碼寫成可修改的樣式,便於再利用,包括裏面的字符數組TemArray_Result[Size],Size其實是可以修改的,只不過是重定義的問題,用動態分配內存方式就可以解決:
int arr[n];
p=(int )malloc(nsizeof(int));
下面,依次講解下我的解題思路。
一、聲明變量
其實也沒什麼可聲明的,畢竟就一個東西,待存入數串(代指待拆分的整數)的字符數組。所以我乾脆就把頭文件、常量之類的放一起吧。
對了,我用的是使用了38譯碼器的8位數碼管。
#include<stdio.h>
#include<string.h>
// -----------------
#define Size 8 // 數串範圍限制,因爲使用的是8位數碼管,所以限制是8
// -----------------
char TemArray_Result[8] = {'0','0','0','0','0','0','0','0'}; // 待存入的字符數組
char temResult[Size]; // 臨時中轉字符串,當作中轉的字符串
int countZero = 0; // 末尾0計數
// -----------------
二、整數放入字符串
很簡單的,使用sprintf()函數就可以實現了。
補充下:
temporaryResult就是輸入的整數,準備要被切割的,正數也好,負數也罷,割就對了。
sprintf(temResult,"%d",temporaryResult);
到這裏,是不是以爲就結束了?
沒錯,講到這裏,確實結束了,現在已經可以使用了,其實也就一個sprintf()函數,記住,它很強大。
但如果你還有別的需求,比如……eee
放到數碼管,並用switch()展示對應的符號、數字,這樣的話,你這遍歷,可就出了問題啊,畢竟,你也不知道你輸入的是幾位數字,對吧,當然,假設你知道幾位,那麼數碼管顯示的時候也需要遍歷8個位,如果其他沒用的位不置零,就不妥了,或者說,會異常發光,哈哈。
所以,如果有興趣就接着往下看,最後處理結果自己往下滑到底端。
三、計算末尾含0的個數
因爲一會要進行“清零”操作 – 把你輸入的數字末尾0全部清除,爲了保存這僅存的希望,或者說是不亂殺無辜,那咋辦,就存 0 唄,待會再加回來。
for(int i = strlen(temResult) - 1; temResult[i] == '0'; i --)
countZero ++;
四、判斷輸入的量是否超出Size(8位)
// 檢測該數串是否超出8位
if((strlen(temResult) >= 0) && (strlen(temResult) <= Size))
{
// 重要代碼,往下看
}
// 如果超出Size位(即超8位溢出),執行溢出函數
else
overflowDigits();// 溢出函數,自己寫的,在這就不提及了
五、逐個把中轉字符串內容放入字符數組
前提是if()語句成立!!!
// 逐個放入Result的字符數組
for(int i = 0; i < strlen(temResult); i ++)
TemArray_Result[i] = temResult[i];
執行完後,存入的數如果不夠Size位,最後的就會依然還是’0’。
爲了正確顯示數字,下面開始,清零。
同時,因爲剛纔已經計算好了原先數串末尾有幾個0,所以哈哈,隨便清零,問題不大。
for(int j = (Size - 1); TemArray_Result[j] == '0'; )
{
for(int i = 1; i < Size; i ++)
TemArray_Result[Size - i] = TemArray_Result[Size - i - 1];
TemArray_Result[0] = '0';
}
六、添零騷操作
前提是if()語句成立!!!
通過countZero = ? 判斷原先零的個數,並重新在末尾添加零。
for(int i = 0; i < countZero; i ++)
{
for(int i = 0; i < (Size - 1); i ++)
TemArray_Result[i] = TemArray_Result[i + 1];
TemArray_Result[7] = '0';
}
七、完整程序
#include<stdio.h>
#include<string.h>
// -------------------------------------------------------------
#define Size 8 // 數串範圍限制,因爲使用的是8位數碼管,所以限制是8
// -------------------------------------------------------------
char TemArray_Result[8] = {'0','0','0','0','0','0','0','0'}; // 待存入的字符數組
// ----------------------------------------------------------------------
/**
** 拆分函數
** temporaryResult:待拆分的整數
*/
void spiltResult(int temporaryResult)
{
char temResult[Size]; // 臨時中轉字符串
int countZero = 0; // 末尾0計數
// -----------------------------------
// 把整數放入臨時字符串,再拆分並轉成放入TemArray_Result字符數組
sprintf(temResult,"%d",temporaryResult);
// -----------------------------------
// 計算末位有幾個0
for(int i = strlen(temResult) - 1; temResult[i] == '0'; i --)
countZero ++;
// -----------------------------------
// 檢測該數串是否超出8位
if((strlen(temResult) >= 0) && (strlen(temResult) <= Size))
{
// 逐個放入Result的字符數組
for(int i = 0; i < strlen(temResult); i ++)
TemArray_Result[i] = temResult[i];
// -----------------------------------
// 如果末尾爲0,退格,但若是尾數是0的結果會出問題,所以後面還有一個添零操作
for(int j = (Size - 1); TemArray_Result[j] == '0'; )
{
for(int i = 1; i < Size; i ++)
TemArray_Result[Size - i] = TemArray_Result[Size - i - 1];
TemArray_Result[0] = '0';
}
// -----------------------------------
// 判斷原先0的個數,並重新在末尾添加零
for(int i = 0; i < countZero; i ++)
{
for(int i = 0; i < (Size - 1); i ++)
TemArray_Result[i] = TemArray_Result[i + 1];
TemArray_Result[7] = '0';
}
}
// -----------------------------------
// 如果超出Size位(即超8位溢出),執行溢出函數
else
overflowDigits();
}
// ----------------------------------------------------------------------
/**
** 結果位數溢出處理函數
*/
void overflowDigits()
{
CEResult();
}
// ----------------------------------------------------------------------
/**
** 置零函數
** 將TemArray_Result[N]全部置零
*/
void CEResult()
{
for(int i = 0; i < Size; i ++)
TemArray_Result[i] = '0';
}
// ----------------------------------------------------------------------
int main()
{
spiltResult(1234); // 正整數
for(int i = 0; i < Size; i ++)
printf("%d:%c\n",i+1,TemArray_Result[i]);
CEResult(); // 清零
printf("--------------------------------------\n");
spiltResult(123400); // 末尾含0正整數
for(int i = 0; i < Size; i ++)
printf("%d:%c\n",i+1,TemArray_Result[i]);
CEResult(); // 清零
printf("--------------------------------------\n");
spiltResult(-1234); // 負整數
for(int i = 0; i < Size; i ++)
printf("%d:%c\n",i+1,TemArray_Result[i]);
CEResult(); // 清零
printf("--------------------------------------\n");
spiltResult(-1020300); // 末尾含0負整數
for(int i = 0; i < Size; i ++)
printf("%d:%c\n",i+1,TemArray_Result[i]);
CEResult(); // 清零
printf("--------------------------------------\n");
spiltResult(123456789); // 超過Size溢出數
for(int i = 0; i < Size; i ++)
printf("%d:%c\n",i+1,TemArray_Result[i]);
return 0;
}
至此,全部over!
補充下:有些函數只是爲了看結果的時候方便。
包括main()函數很多內容都是爲了結果!!!!
接下來,看圖吧。