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()函数很多内容都是为了结果!!!!

接下来,看图吧。
结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值