【算法和数据结构】_11_小算法_itoa、ftoa及字符串倒置
【1】main.c
/****************************************************
*
* 把整数按照进制数转换为相应进制的字符串
*(要考虑符号),比如 -1234,转换为 “-1234”。
*
*
****************************************************/ #include <stdio.h>
#include <string.h> #define BUF_LEN 12 //将数字转换成十进制子函数
void iToDecCh(int iNum,char *p); //字符串倒置函数
void strReverse(char* str); /*
根据不同的进制申请不同的字符空间
因为有符号的int最大值为:
INT_MAX: +2147 4836 47
INT_MIN: -2147 4836 47
共需要11个字符,加上最后的'\0';则需要12字节的空间 任何1个整数表示成16进制,则需要 0X FFFF FFFF
2+8 个字符,加上最后的'\0';则需要11个字节的空间 这里定义12个字符的buf。
*/
char strBuf[BUF_LEN]; /*******
*
* 主函数: main 函数开始
*
********/
int main()
{
char* p; iToDecCh(,strBuf);
//strReverse(strBuf); p=strBuf;
while(*p)
putchar(*p++); getchar();
return ;
} /******************************************
将一个数字转换成十进制字符串
算法: 原型:
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=0x8000000; // 用于判断正负 if(==num)
{
p[]='+';
p[]='';
return ;
} //判断正、负情况
if(num & signedFlag)
{
flag=; // p[11] ='-'; 负数
num=- * num; //将负数变成整数
}
else
{
flag=; // p[11] ='+'; 正数
} i=;
while(num > )
{
p[i++]= num % + '';
num=num /;
} if(flag==)
p[i++]='+';
else
p[i++]='-'; p[i]='\0'; strReverse(p);
} /*****************************************
字符串倒置函数
算法: 原型:
void strReverse(char* str)
返回值:
无
参数:
char *str:待倒置的字符串首地址
异常:
无
其他: ******************************************/
void strReverse(char* str)
{
int i,
j; j=strlen(str); for(i=,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[];
char itoaArray[]; //字符串倒置函数,将 “abcd” 倒置为 “dcba”
char* 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转换的时候,进行测试用的
//所以这里没有进行正负的判断
char* ftoa(float num)
{
int i;
int x;
float y;
char* shift; x=(int)num; //取数据的整数部分 shift=ftoaArray;
while(x > )
{
*shift++= x% + '';
x /= ;
}
*shift++ = x + '';
*shift = NUL ;
strRev(ftoaArray); *shift++ = '.'; //把最后的 '\0' 替换为 '.' //这样处理就可以将小数点小于4位、和大于4位的都处理完
i=;
y=num-(int)num; //y为小于1的小数
while(y>0.000001)
{
y= y*;
x=y;
*shift++ =x +'';
y = y-(int)(y); if(==i) //不管有没有转换完,循环4次都跳出
{
break;
}
i++;
}
*shift = NUL; return ftoaArray;
} //将十进制的数转换为字符串
char* itoa(unsigned short num)
{
int i=; while(num >= )
{
itoaArray[i++]=num% + '';
num /= ;
}
itoaArray[i++]=num + '';
itoaArray[i]=NUL; strRev(itoaArray); return itoaArray;
} /*******
*
* 主函数: main 函数开始
*
********/
int main()
{ char* str="abcd";
strRev(str);
puts(str); itoa();
puts(itoaArray); ftoa(311.1415516);
printf("%s",ftoaArray); getchar();
return ;
}
其实,在第二个的itoa中,可以用指针代替数组的index索引,用指针速度更快。
【算法和数据结构】_11_小算法_itoa、ftoa及字符串倒置的更多相关文章
- python算法与数据结构-选择排序算法(33)
一.选择排序的介绍 选择排序(Selection sort)是一种简单直观的排序算法.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素, ...
- python算法与数据结构-希尔排序算法(35)
一.希尔排序的介绍 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. 希尔排序是把记录按下标的一定增量分组,对每 ...
- python算法与数据结构-算法介绍(31)
一.算法和数据结构 什么是算法和数据结构?如果将最终写好运行的程序比作战场,我们程序员便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰:兵法!故,数据结构和算法是一 ...
- 数据结构(DataStructure)与算法(Algorithm)、STL应用
catalogue . 引论 . 数据结构的概念 . 逻辑结构实例 2.1 堆栈 2.2 队列 2.3 树形结构 二叉树 . 物理结构实例 3.1 链表 单向线性链表 单向循环链表 双向线性链表 双向 ...
- 浅谈算法和数据结构: 七 二叉查找树 八 平衡查找树之2-3树 九 平衡查找树之红黑树 十 平衡查找树之B树
http://www.cnblogs.com/yangecnu/p/Introduce-Binary-Search-Tree.html 前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的 ...
- Python算法与数据结构--求所有子数组的和的最大值
Python算法与数据结构--求所有子数组的和的最大值 玄魂工作室-玄魂 玄魂工作室秘书 玄魂工作室 昨天 题目:输入一个整形数组,数组里有正数也有负数.数组中连续的一个或多个整数组成一个子数组,每个 ...
- 【数据结构】KMP算法
我还是不太懂... 转2篇大神的解释 1>https://www.cnblogs.com/yjiyjige/p/3263858.html 2>https://blog.csd ...
- [Oracle] 关系型数据库排序算法和数据结构以及关联查询
关系型数据库排序算法和数据结构以及关联查询 1. Merge sort 理解merge sort算法将有助于更好地理解数据库join操作 - merge join 算法逻辑 将2个有序的大小为N/2的 ...
- 数据结构与算法系列----最小生成树(Prim算法&Kruskal算法)
一:Prim算法 1.概览 普里姆算法(Prim算法).图论中的一种算法.可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中.不但包含了连通图里的全部顶点(英语:Ve ...
随机推荐
- iOS-Delegate模式
代理模式 顾名思义就是委托别人去做事情. IOS中经常会遇到的两种情况:在cocoa框架中的Delegate模式与自定义的委托模式.下面分别举例说明一下: 一.cocoa框架中的delegate模式 ...
- WPF入门教程系列三——Application介绍(续)
接上文WPF入门教程系列二——Application介绍,我们继续来学习Application 三.WPF应用程序的关闭 WPF应用程序的关闭只有在应用程序的 Shutdown 方法被调用时,应用程序 ...
- android 权限大全
教程 博客 淘帖 论坛›eoe·Android开发资源区›Android开发实例教程 191507 12 / 2 页下一页 android 权限大全 『癲瘋霸気』 于 2013-4-3 10: ...
- 使用XSD校验Mybatis的SqlMapper配置文件(1)
这篇文章以前面对SqlSessionFactoryBean的重构为基础,先简单回顾一下做了哪些操作: 新建SqlSessionFactoryBean,初始代码和mybatis-spring相同: 重构 ...
- SDWebImage清除图片缓存
背景: 使用 SDWebImage 库,由于内存中一直缓存着加载的图片,而导致内存过高(我们无法手动管理内存),弹出内存警告而导致程序很卡或者直接crash掉. 我的解决方法: 在AppDelegat ...
- .NET面试题解析(01)-值类型与引用类型
系列文章目录地址: .NET面试题解析(00)-开篇来谈谈面试 & 系列文章索引 常见面试题目: 1. 值类型和引用类型的区别? 2. 结构和类的区别? 3. delegate是引用类型还 ...
- poj2253 Frogger(最短路变型或者最小生成树)
/* 题意:就是源点到终点有多条的路径,每一条路径中都有一段最大的距离! 求这些路径中最大距离的最小值! Dijkstra, Floyd, spfa都是可以的!只不过是将松弛的条件变一下就行了! 想了 ...
- 总结整理 -- python系列
python系列 python--基础学习(一)开发环境搭建,体验HelloWorld python--基础学习(二)判断 .循环.定义函数.继承.调用 python--基础学习(三)字符串单引号.双 ...
- Servlet的四种映射模式
1. 路径匹配模式 <url-pattern>/test/*</url-pattern> 2. 扩展名匹配模式 <url-pattern>*.do</url- ...
- Java实现过滤中文乱码
最近在日志数据清洗时遇到中文乱码,如果只要有非中文字符就将该字符串过滤掉,这种方法虽简单但并不可取,因为比如像Xperia™主題.天天四川麻将Ⅱ这样的字符串也会被过滤掉. 1. Unicode编码 U ...