找回密码
 注册
关于网站域名变更的通知

字符串和整数转换的C实现

2024-4-1 14:50| 查看: 86| 评论: 0

摘要: 即将就业,也复习复习相关的知识,看了看嵌入式C的笔试题,整体感觉考试题目还是蛮有意思的,考点都比较重要,而且比较细,主要还是设计到一些指针和数组已经函数指针等基本的概念。比如: 如何实现两个值中的最大值 ...
即将就业,也复习复习相关的知识,看了看嵌入式C的笔试题,整体感觉考试题目还是蛮有意思的,考点都比较重要,而且比较细,主要还是设计到一些指针和数组已经函数指针等基本的概念。
比如:
如何实现两个值中的最大值:((a+b) + abs(a-b))/2
如何实现不依靠中间量实现两个变量值的交换:
a = a + b;
b = a - b;
a = a - b;
或者
a = a^b;
b = a^b;
a = a^b;
其中后面的这种方式更加的优越。

sizeof与strlen的区别
其中sizeof是一个操作符,在编译过程中就能确定结果,但是strlen是一个函数,只有在运行的时候才能得到返回值。

指针、数组、函数等各种形式的指针结合起来也是出题的重点。

在编程中主要是设计到字符串、链表的处理问题,我就找几个简单的程序当做练兵吧。实现整数和字符串之间的转换问题。这个转换问题实质上是处理好ASCII码与数字之间的切换关系,即数字的ASCII码形式为‘0’= 0 + 48; ‘9’= 9 + 48;0 = 0-48。
这个关系是转换过程中最主要的问题,当然整数到字符串的转换过程中需要注意负数的影响,如果负数没有正确处理,就可能出现一些莫名其妙的结果。

首先实现字符串到整数的转换过程:这个过程相对来说比较容易,因为这个过程可直接判断是正数还是负数,直接判断下标0对应的内容即可,其他的可以通过逐步求和累加的形式实现。基本的转换过程如下:
int myatoi(char *src)
{
char flag = 0;
int sum = 0;
int i = 0;
int len = strlen(src);

/*参数的正确性*/
if(NULL == src)
{
return 0;
}

/*是否存在符号问题*/
if(src == -)
{
flag = -;
++ i ;
}
for( ; i < len ; ++ i)
{
/*判断字符是否合法*/
if(src < 48 && src > 57)
return 0;

/*数据求和,注意数值的转换问题src - 48*/
sum = sum *10 + src - 48;
}

/*根据标志位实现返回正确的正负数*/
if(flag == -)
return -sum;
else
return sum;
}
整数到字符串的转换:实际上就是将一个整数的各个位分离出来,然后实现字符串的排序问题,因为数字长度的不确定性使得不便于快速的确定字符串的长度,只能首先分解,然后排序。同时也需要注意符号的存在,基本的转换过程如下:

char* myitoa(int num, char *str)
{
char flag = 0;
int i = 0, count = 0, j = 0;
/*参数检测*/
if(NULL == str)
{
return NULL;
}

/*判断数值的正负,设置对应的符号*/
if(num < 0)
{
str[i ++] = -;
/************************
同时要对数值取绝对值
保证后面取余整除操作正常
*************************/
num = -num;
}

while(num / 10)
{
/***************************
count用来保存实际的数字个数,
便于后期的顺序调换
****************************/
++ count;
/*实际保存的顺序为反序列*/
str[i++] = num % 10 + 48;
num /= 10;
}
/*判断是*/
if(num %10)
{
str[i++] = num %10 + 48;
++ count;
}
/*字符串结束符*/
str = 0;

/*实现数据的较好操作*/
i = 0;
if(str[0] == -)
{
i = 1;
}
/*实际交换的下标区间为i~j*/
j = count + i - 1;
for(; i < j ; ++ i, --j)
{
/*数据的较好操作*/
str = str + str[j];
str[j] = str - str[j];
str = str - str[j];
}
/*返回实际的字符串*/
return str;
}
上面的代码就实现了字符串与整数的转换问题,基本上实现了各种情况的转换。

本站资讯文章系编辑转载,转载目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本站联系,我们将在第一时间删除内容!
[声明]本站文章版权归原作者所有 内容为作者个人观点 本站只提供参考并不构成任何投资及应用建议。
本站拥有对此声明的最终解释权。
收藏 邀请
关闭

推荐内容上一条 /1 下一条

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-9-23 16:27 , Processed in 0.109375 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

返回顶部