好贷网好贷款

atoi 和 itoa的实现

发布时间:2016-12-5 22:27:22 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"atoi 和 itoa的实现",主要涉及到atoi 和 itoa的实现方面的内容,对于atoi 和 itoa的实现感兴趣的同学可以参考一下。

atoi 和 itoa是面试笔试经常要考到的题目,下面两份代码是用C语言实现的atoi和itoa: 1, atoi 原型: int atoi(const char *nptr); 函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。 #include <stdio.h> #include <assert.h> static int atoi(const char* str) { int result = 0; int sign = 1; assert(str != NULL); // proc whitespace characters while (*str==' ' || *str=='\t' || *str=='\n') ++str; // proc sign character if (*str=='-') { sign = -1; ++str; } else if (*str=='+') { //sign = 1; ++str; } // proc numbers while (*str>='0' && *str<='9') { //result = result*10 + *str++ - '0'; result = result*10 + *str - '0'; ++str; } // return result return sign*result; } 2. itoa char *itoa( int value, char *string,int radix);   原型说明:   value:欲转换的数据。   string:目标字符串的地址。   radix:转换后的进制数,可以是10进制、16进制等 char *itoa(int val, char *buf, unsigned radix) { char *p; char *firstdig; char temp; unsigned digval; p = buf; if(val <0) { *p++ = '-'; val = (unsigned long)(-(long)val); } firstdig = p; do{ digval = (unsigned)(val % radix); val /= radix; if (digval > 9) *p++ = (char)(digval - 10 + '0'); else *p++ = (char)(digval + '0'); }while(val > 0); *p-- = '\0 '; do{ temp = *p; *p = *firstdig; *firstdig = temp; --p; ++firstdig; }while(firstdig < p); return buf; } 方法2(在VC++6.0中编译通过) #include "stdafx.h" #include <stdio.h> char *itoa(int num, char *str, int radix) { //1)将数字转换为字符串 //保存原str char *ptr = str; int i,j; while(num) { *ptr++ = (char)(num % radix + '0'); num /= radix; if(num < radix) { *ptr++ = (char)(num + '0'); //勿忘在字符串结尾添加'\0' *ptr = '\0'; break; } }//end while //2)将字符串逆序 //j值为数组最后一个下标 j = ptr-str-1; for(i=0; i<(ptr-str)/2; ++i) { char temp = str[i]; str[i] = str[j]; str[j--] = temp; } //3)返回值 return str; } int main(int argc, char* argv[]) { char res[9] ; itoa(12345678,res,10); printf("== %s \n",res); return 0; }

上一篇:UML图(三)类图
下一篇:数据结构之内部排序算法

相关文章

相关评论