转载请标明出处:http://www.cnblogs.com/NongSi-Net/p/6805844.html
今天主要总结下:完成编程:
1、除printf函数之外,不用任何c语言库函数,实现将字符串转化为整数的函数myatoi(可以支持负整数的转化)。
2、除printf函数之外,不用任何c语言库函数,实现将整数转化为字符串的函数myitoa(可以支持负整数的转化)。
如果想理解这个问题,必须知道一个知识:
字符‘0’+一个整数,则得到这个整数的字符型。反之,字符型-字符‘0’则得到整数值。
如:‘0’+9=‘9’;
‘9’-‘0’=9;
代码如下:
/* ============================================================================ Name : mystoi.c Author : Version : Copyright : Your copyright notice Description : Hello World in C, Ansi-style ============================================================================ */ #include <stdio.h> void mylength(int a,int *lenth) { int i = 0; if(lenth == NULL) { printf("mylength fun error "); } do { a = a / 10; i++; }while(a); *lenth = i; } void reserve(int lenth,char buf[]) { int i = 0; char temp; for(i = 0;i<lenth/2;i++) { temp = buf[i]; buf[i] = buf[lenth-i-1]; buf[lenth-i-1] = temp; } } //1.除printf函数之外,不用任何c语言库函数,实现将整数转化为字符串的函数myitoa(可以支持负整数的转化)。 void myitoa(int a,char buf[]) { int i = 0; int sign; int length = 0; mylength(a,&length); if((sign = a) < 0) a = -a; for(i = 0;i<length;i++) { buf[i] = '0' + a % 10; a = a / 10; } if(sign < 0) { buf[i++] = '-'; reserve(length+1,buf); }else { reserve(length,buf); } } void slength(char buf[],int *length) { int i = 0; while(buf[i]) { i++; }; *length = i; } //2、除printf函数之外,不用任何c语言库函数, //实现将字符串转化为整数的函数myatoi(可以支持负整数的转化)。 int myatoi(char buf[]) { int sum = 0; int i = 0; int flag = 1; while(buf[i]) { if(buf[i] == ' ') i++; else if(buf[i] == '+') { i++; flag = 1; } else if(buf[i] == '-') { i++; flag = -1; } else if(buf[i]>='0'&&buf[i]<='9') { sum = sum*10+(buf[i] - '0'); i++; } else return 0; } sum = sum * flag; return sum; } int main(void) { int abc = 123456789; char arr[1024] = "--+1836"; int length = 0; char buf[1024] = {0}; printf("the following thing is myitoa...Int---->string "); myitoa(abc,buf); printf("the string is %s. ",buf); printf("the following thing is myatoi...string---->Int "); slength(arr,&length); printf("the string's length is %d. ",length); printf("the Intger is %d. ",myatoi(arr)); return 0; }