C程序之整數拆分依次存入字符數組

整數拆分依次存入字符數組

給定一串整數,該如何存入字符數組,這在軟件編程看來,似乎不是很必要的,尤其在接下來的操作中,會有把數組不停位移的操作,原因很簡單:
寫這篇文章的時候,我主要用在單片機開發上,我儘量把代碼寫成可修改的樣式,便於再利用,包括裏面的字符數組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()函數很多內容都是爲了結果!!!!

接下來,看圖吧。
結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章