C语言实现int转换字符串的一种实现

来源:互联网 发布:淘宝好评语30字化妆品 编辑:程序博客网 时间:2024/05/29 04:17

在技术人员面试的时候,经常会被要求实现标准库的一些函数比如strlen,strcpy,itoa,atoi等等。本文就简单的聊聊一次面试的笔试题,作为一次失败面试的记录。


由于预先不知道整数的位数,一般在转字符串的时候,都是通过从个位开始往高位逐个转换。这样就会在转换完成以后,需要对生成的字符串进行逆序,才能达到最终结果。

本方案采取了一个小技巧,通过指针运算,字符拷贝(当然也可以直接通过内存考虑)方式,省略了最终的一个步骤:字符串逆序。

以下是具体的程序实现:

  1 #include <stdio.h>  2   3 char* toString(int iVal)  4 {  5     /* 优化点:  6      *  1,不通过堆栈的方式,无需进出栈,或者是对字符串进行逆序,直接通过指针运算,内存拷贝方式或者最终结果  7      */   8     char str[1024] = {'\0',};  9     char *pos = NULL; 10     int sign = 0;   //正数 或者是 0 11  12     int abs = iVal; 13  14     pos = str + 1023; //移动指针,指向堆栈底部 15     *pos-- = '\0';  //end 16  17     if(iVal < 0) 18     { 19         sign = 1; 20         abs = -abs; 21     } 22      23     int dit = 0; 24     while(abs > 0) 25     { 26         dit = abs % 10; 27         abs = abs / 10; 28  29         *pos-- = (char)('0' + dit);  30     } 31  32     if(sign) 33         *pos-- = '-'; 34  35     char *ret = (char*)malloc(1024 - (pos - str)); 36  37     if(iVal == 0)               //0的一个处理 38         strcpy(ret, "0"); 39     else                        //iVal非0的拷贝 40         strcpy(ret, pos+1); 41  42     return(ret);     43 } 44  45 int main(int argc, char* argv[]) 46 { 47     char* ret = NULL; 48  49     int iVal = atol(argv[1]); 50 //  int iVal = 123456; 51     printf("ival = %s\n", toString(iVal)); 52  53     return(0); 54 } 


阅读全文
0 0
原创粉丝点击