将整数转换成字符串,例如,-123变为“-123”
这个是2013年IBM校园招聘的笔试题目,是一个非常基础的题目。但是,有几点非常容易出现错误,本人笔试的时候,这个基础题目写错了,所以没有进入IBM的面试。可见,平时的练习十分的重要,学习算法的时候,一定要经过实践的检验。
1、传入函数的指针参数,一定要做正确性检测。
2、对于负数的处理,很容易被忽略掉,因为-1 % 10 = -1,所以,应该先记住负号,然后,就负数转化为一个正整数去处理。(我笔试的时候,就没有考虑到这一点,杯具……)
3、在最后逆置数组的时候,循环条件是p <= q,而不能是p != q,否则很容易导致死循环。
当然,也可以使用一些API实现转换操作,例如:sprintf和itoa,此处不在赘述。
下面给出一个常规的转化算法,希望有人能提出跟高效的算法来。如有错误,请指正,非常感谢!
- #include <iostream>
- #include <stdlib.h>
- using namespace std;
- //将int转化为char *
- /*
- 参数:
- const int ivar:待转换整数
- char *pDes:存放整数的空间
- */
- void intToString( const
int ivar, char *pDes) - {
- if(NULL == pDes )
- {
- return;
- }
- intn = ivar,flag = 1;
- /*
- 负数要特殊的处理,以正确的进行模运算!!!
- 难怪IBM要刷我不让我进入面试环节……
- */
- if(n < 0 )
- {
- //n是负数
- flag = 0;
- n = n*(-1);
- }
- intlast = 0;
- char*p = pDes;
- //1、逆序的放入内存空间中去
- while(n )
- {
- last = n % 10;
- *p = last + '0';
- p++;
- n/=10;
- }
- //2、判断是否需要加入负号,并加入字符串结尾标志‘\0’
- if(0 == flag )
- {
- *p = '-';
- p++;
- }
- *p = '\0';
- //3、字符串的逆序操作
- char*q = pDes;
- p--;//指向最后一个字符,而非'\0'
- chartemp;
- /*
- while( p != q )
- 这么写会导致死循环,所以,不可以想当然
- */
- while(p >= q )
- {
- temp = *p;
- *p = *q;
- *q = temp;
- p--;
- q++;
- }
- }
- int main( )
- {
- chara[50];
- memset( a, 0, 50);
- intToString( -8374563, a );
- cout<<a<<endl;
- system("pause");
- return0;
- }