现在的位置: 首页 > 综合 > 正文

将整数转换成字符串

2013年06月21日 ⁄ 综合 ⁄ 共 1253字 ⁄ 字号 评论关闭

将整数转换成字符串,例如,-123变为“-123”

这个是2013年IBM校园招聘的笔试题目,是一个非常基础的题目。但是,有几点非常容易出现错误,本人笔试的时候,这个基础题目写错了,所以没有进入IBM的面试。可见,平时的练习十分的重要,学习算法的时候,一定要经过实践的检验。

1、传入函数的指针参数,一定要做正确性检测。

2、对于负数的处理,很容易被忽略掉,因为-1 % 10 = -1,所以,应该先记住负号,然后,就负数转化为一个正整数去处理。(我笔试的时候,就没有考虑到这一点,杯具……)

3、在最后逆置数组的时候,循环条件是p <= q,而不能是p != q,否则很容易导致死循环。

当然,也可以使用一些API实现转换操作,例如:sprintf和itoa,此处不在赘述。

下面给出一个常规的转化算法,希望有人能提出跟高效的算法来。如有错误,请指正,非常感谢!

  1. #include <iostream>
  2. #include <stdlib.h>
  3.  using namespace std;
  4.  //将int转化为char *
  5. /*
  6.     参数:
  7.     const int ivar:待转换整数
  8.     char *pDes:存放整数的空间
  9.  */
  10. void intToString( const
    int ivar, char *pDes)
  11. {
  12.     if(NULL == pDes )
  13.     {
  14.         return;
  15.     }
  16.     intn = ivar,flag = 1;
  17.     /*
  18.         负数要特殊的处理,以正确的进行模运算!!!
  19.         难怪IBM要刷我不让我进入面试环节……
  20.     */
  21.     if(n < 0 )
  22.     {
  23.         //n是负数
  24.         flag = 0;
  25.         n = n*(-1);
  26.     }
  27.     intlast = 0;
  28.     char*p = pDes;
  29.     //1、逆序的放入内存空间中去
  30.     while(n )
  31.     {
  32.         last = n % 10;
  33.         *p = last + '0';
  34.         p++;
  35.         n/=10;
  36.     }
  37.     //2、判断是否需要加入负号,并加入字符串结尾标志\0
  38.     if(0 == flag )
  39.     {
  40.         *p = '-';
  41.         p++;
  42.     }
  43.     *p = '\0';
  44.     //3、字符串的逆序操作
  45.     char*q = pDes;
  46.     p--;//指向最后一个字符,而非'\0'
  47.     chartemp;
  48.     /*
  49.         while( p != q )
  50.         这么写会导致死循环,所以,不可以想当然
  51.     */
  52.     while(p >= q )
  53.     {
  54.         temp = *p;
  55.         *p = *q;
  56.         *q = temp;
  57.         p--;
  58.         q++;
  59.     }
  60. }
  61. int main( )
  62. {
  63.     chara[50];
  64.     memset( a, 0, 50);
  65.     intToString( -8374563, a );
  66.     cout<<a<<endl;
  67.     system("pause");
  68.     return0;
  69. }

抱歉!评论已关闭.