数字 字符串 转换

首先,字符串是一块连续的内存空间,所以此函数应该使用数组作为数据的容器。

(说明此点,是因为,转换之前,不方便知道转换后的字符串的长度,

想着使用链表的动态性更好方便一些,但采用链表后,最终的结果将不再是一个字符串)

 

代码如下:

 1 void long2String(long long lNumber,char* pArr)
2 {
3 if(NULL == pArr){
4 return;
5 }
6
7 char ch = '0';
8 int arrIndex = 0;
9
10 //取余数,再缩小十倍,以实现各位数据的提取
11 while(0 != lNumber)
12 {
13 ch = '0' + lNumber % 10;//自动转换成long进行运算,赋值时再转换回char
14 pArr[arrIndex ++] = ch;
15 lNumber = lNumber/10;
16 }
17
18 pArr[arrIndex] = '\0';//结束后,添加字符串的结束符
19
20 //由于是从个位开始存储的,所以实际的字符串要进行逆序
21 char chTemp = '0';
22 //数组内容的逆序,以中间为结点,头和尾进行依次的交换就可以了
23 //arrINdex是奇数时,对换是一个完全对称的过程;偶数时,则中间的结点也参与了换位
24 for(int i = 0;i < arrIndex/2;++i){
25 chTemp = pArr[i];
26 pArr[i] = pArr[arrIndex - i - 1];
27 pArr[arrIndex - i - 1] = chTemp;
28 }
29 }

这里的关键其实就是两点:

1,取余数并转换为字符存储到数组中(取余数后不要忘记再将原数字缩小10倍)

2,字符串的结束符要添加

3,要对结果数组进行倒置

 

反过来转换,字符串转换为数字,也把每一位的整数放到一个数组中:

 1 void String2Number(char* pSrc,int dataArr[],int& arrLen)
2 {
3 if(NULL == pSrc)
4 {
5 return;
6 }
7
8 char* pChar = pSrc;
9 int arrIndex = 0;
10
11 while('\0' != *pChar)
12 {
13 if(*pChar < '0' || *pChar > '9'){//跳过非数字字符
14 pChar ++;
15 continue;
16 }else{//存储数字字符
17 dataArr[arrIndex ++] = *pChar - '0';
18 pChar ++;
19 }
20 }
21
22 int headZeroNumber = 0;
23 int iLoop = 0;
24 //获取数组中连续0的个数
25 while(0 == dataArr[iLoop ++]){
26 headZeroNumber ++;
27 }
28 //覆盖掉前面的0
29 for(int i = headZeroNumber;i < arrIndex;++i)
30 {
31 dataArr[i - headZeroNumber] = dataArr[i];
32 }
33 //整数的长度
34 arrLen = arrIndex - headZeroNumber;
35 }



posted @ 2012-02-21 21:47  Marstar  阅读(302)  评论(0)    收藏  举报