itoa、ftoa及字符串倒置

【算法和数据结构】_11_小算法_itoa、ftoa及字符串倒置

【1】main.c

/****************************************************** 把整数按照进制数转换为相应进制的字符串*(要考虑符号),比如 -1234,转换为 “-1234”。******************************************************/#include <stdio.h>#include <string.h>#define BUF_LEN 12iToDecCh(int iNum,char *p);strReverse(char* str);/*根据不同的进制申请不同的字符空间因为有符号的int最大值为:INT_MAX: +2147 4836 47INT_MIN: -2147 4836 47共需要11个字符,加上最后的’\0’;则需要12字节的空间任何1个整数表示成16进制,则需要 0X FFFF FFFF2+8 个字符,加上最后的’\0′;则需要11个字节的空间这里定义12个字符的buf。*/char strBuf[BUF_LEN];/********* 主函数: main 函数开始*********/int main(){char* p;iToDecCh(0,strBuf);//strReverse(strBuf);p=strBuf;while(*p)putchar(*p++);getchar();return 0;}/******************************************将一个数字转换成十进制字符串算法:原型:void iToDecCh(int num,char *p)返回值:无参数:int num: 待转换的数字char* p: 存储字符串的线性地址空间首地址异常:无其他:无********************************************/void iToDecCh(int num,char *p){int i;int flag;unsigned int decMask;unsigned int signedFlag;signedFlag=(0==num){p[;p[;return ;}(num & signedFlag){flag=0; // p[11] =’-‘; 负数 num=-1 * num; //将负数变成整数 }else{flag=1; // p[11] =’+’; 正数 }i=0;while(num > 0){p[i++]= num % ;num=num /10;}if(flag==1)p[i++]=;elsep[i++]=;p[i]=;strReverse(p);}/*****************************************字符串倒置函数算法:原型:void strReverse(char* str)返回值:无参数:char *str:待倒置的字符串首地址异常:无其他:******************************************/void strReverse(char* str){int i,j;j=strlen(str);for(i=0,j–;i<j;i++,j–){str[i]=str[i] ^ str[j];str[j]=str[j] ^ str[i];str[i]=str[j] ^ str[i];}}

【2】main.c

#include <stdio.h>#include <string.h>#define NUL (‘\0’)char ftoaArray[30];char itoaArray[30];* strRev(char* str){char* head;char* pShift;head=str;pShift=str;while(*pShift) pShift++;–pShift;while(pShift>head){*pShift = *pShift ^ *head;*head = *pShift ^ *head;*pShift– = *pShift ^ *head++; //最后的时候移动指针的指向 }return str;}//将浮点数转换为字符串, 保留4位数据精度//这里是在ADC转换的时候,,进行测试用的* ftoa(float num){int i;int x;float y;char* shift;x=(int)num; //取数据的整数部分shift=ftoaArray;while(x > 10){*shift++= x%;x /= 10;}*shift++ = x + ;*shift = NUL ;strRev(ftoaArray);*shift++ = ; //把最后的 ‘\0’ 替换为 ‘.’//这样处理就可以将小数点小于4位、和大于4位的都处理完i=1;y=num-((y>0.000001){y= y*10;x=y;*shift++ =x +;y = y-(int)(y);if(4==i) //不管有没有转换完,循环4次都跳出 {break;}i++;}*shift = NUL;return ftoaArray;}* itoa(unsigned short num){int i=0;while(num >= 10){itoaArray[i++]=num%;num /= 10;}itoaArray[i++]=num + ;itoaArray[i]=NUL;strRev(itoaArray);return itoaArray;}/********* 主函数: main 函数开始*********/int main(){;strRev(str);puts(str);itoa(1234);puts(itoaArray);ftoa(311.1415516);printf(,ftoaArray);getchar();return 0;}

其实,在第二个的itoa中,可以用指针代替数组的index索引,用指针速度更快。

posted on

希望有一天,自己也像他们一样,踩着单车上路,

itoa、ftoa及字符串倒置

相关文章:

你感兴趣的文章:

标签云: